Commit 4ea879b9 authored by Wu Fengguang's avatar Wu Fengguang Committed by Linus Torvalds

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: default avatarWu 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: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 23539afc
...@@ -249,10 +249,18 @@ static void move_expired_inodes(struct list_head *delaying_queue, ...@@ -249,10 +249,18 @@ static void move_expired_inodes(struct list_head *delaying_queue,
/* /*
* Queue all expired dirty inodes for io, eldest first. * 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) 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); move_expired_inodes(&wb->b_dirty, &wb->b_io, older_than_this);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment