diff options
author | Wu Fengguang <fengguang.wu@intel.com> | 2010-08-11 23:17:42 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-12 17:43:30 +0200 |
commit | 4ea879b96d437693485d21f4b7e1eb72f7615fc2 (patch) | |
tree | 142899843f2ce27334dbd134cd1bab3058cc8028 /fs/fs-writeback.c | |
parent | writeback: don't redirty tail an inode with dirty pages (diff) | |
download | linux-4ea879b96d437693485d21f4b7e1eb72f7615fc2.tar.xz linux-4ea879b96d437693485d21f4b7e1eb72f7615fc2.zip |
writeback: fix queue_io() ordering
This was not a bug, since b_io is empty for kupdate writeback. The next
patch will do requeue_io() for non-kupdate writeback, so let's fix it.
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Martin Bligh <mbligh@google.com>
Cc: Michael Rubin <mrubin@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to '')
-rw-r--r-- | fs/fs-writeback.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 1ce364bbb003..863bfb0eb492 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -249,10 +249,18 @@ static void move_expired_inodes(struct list_head *delaying_queue, /* * Queue all expired dirty inodes for io, eldest first. + * Before + * newly dirtied b_dirty b_io b_more_io + * =============> gf edc BA + * After + * newly dirtied b_dirty b_io b_more_io + * =============> g fBAedc + * | + * +--> dequeue for IO */ static void queue_io(struct bdi_writeback *wb, unsigned long *older_than_this) { - list_splice_init(&wb->b_more_io, wb->b_io.prev); + list_splice_init(&wb->b_more_io, &wb->b_io); move_expired_inodes(&wb->b_dirty, &wb->b_io, older_than_this); } |