Messages in this thread Patch in this message | | | Date | Wed, 3 Mar 2010 15:42:41 +0100 | From | Andre Noll <> | Subject | Re: [Bugme-new] [Bug 15426] New: Running many copies of bonnie++ on different filesystems seems to deadlock in sync |
| |
On 13:03, Jens Axboe wrote:
> Our sync is currently broken in that regard, since it'll wait for too > long. We have a debated patch going, I have included it below. Any > chance you could give it a whirl?
That's the same patch you posted two weeks ago and on which Linus commented he thinks it is broken. He also proposed another, simpler patch (included below) which I'm running for a few days and which fixes the sync problem for me.
However, it is not clear at all whether that simpler patch is correct. Any comments on that?
Thanks Andre
--- fs/fs-writeback.c | 15 ++++++++++----- 1 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 1a7c42c..a0a8424 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -738,11 +738,16 @@ static long wb_writeback(struct bdi_writeback *wb, long wrote = 0; struct inode *inode; - if (wbc.for_kupdate) { - wbc.older_than_this = &oldest_jif; - oldest_jif = jiffies - - msecs_to_jiffies(dirty_expire_interval * 10); - } + /* + * We never write back data that was dirtied _after_ we + * started writeback. But kupdate doesn't even want to + * write back recently dirtied stuff, only older data. + */ + oldest_jif = jiffies-1; + wbc.older_than_this = &oldest_jif; + if (wbc.for_kupdate) + oldest_jif -= msecs_to_jiffies(dirty_expire_interval * 10); + if (!wbc.range_cyclic) { wbc.range_start = 0; wbc.range_end = LLONG_MAX; -- The only person who always got his work done by Friday was Robinson Crusoe[unhandled content-type:application/pgp-signature] | |