提交 f17625b3 编写于 作者: J Jens Axboe

Revert "writeback: ensure that WB_SYNC_NONE writeback with sb pinned is sync"

This reverts commit 7c8a3554.

We are investigating a hang associated with the WB_SYNC_NONE changes,
so revert them for now.
Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
上级 0ae0b5d0
...@@ -193,8 +193,7 @@ static void bdi_wait_on_work_clear(struct bdi_work *work) ...@@ -193,8 +193,7 @@ static void bdi_wait_on_work_clear(struct bdi_work *work)
} }
static void bdi_alloc_queue_work(struct backing_dev_info *bdi, static void bdi_alloc_queue_work(struct backing_dev_info *bdi,
struct wb_writeback_args *args, struct wb_writeback_args *args)
int wait)
{ {
struct bdi_work *work; struct bdi_work *work;
...@@ -206,8 +205,6 @@ static void bdi_alloc_queue_work(struct backing_dev_info *bdi, ...@@ -206,8 +205,6 @@ static void bdi_alloc_queue_work(struct backing_dev_info *bdi,
if (work) { if (work) {
bdi_work_init(work, args); bdi_work_init(work, args);
bdi_queue_work(bdi, work); bdi_queue_work(bdi, work);
if (wait)
bdi_wait_on_work_clear(work);
} else { } else {
struct bdi_writeback *wb = &bdi->wb; struct bdi_writeback *wb = &bdi->wb;
...@@ -282,7 +279,7 @@ void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb, ...@@ -282,7 +279,7 @@ void bdi_start_writeback(struct backing_dev_info *bdi, struct super_block *sb,
args.for_background = 1; args.for_background = 1;
} }
bdi_alloc_queue_work(bdi, &args, sb_locked); bdi_alloc_queue_work(bdi, &args);
} }
/* /*
...@@ -912,7 +909,6 @@ long wb_do_writeback(struct bdi_writeback *wb, int force_wait) ...@@ -912,7 +909,6 @@ long wb_do_writeback(struct bdi_writeback *wb, int force_wait)
while ((work = get_next_work_item(bdi, wb)) != NULL) { while ((work = get_next_work_item(bdi, wb)) != NULL) {
struct wb_writeback_args args = work->args; struct wb_writeback_args args = work->args;
int post_clear;
/* /*
* Override sync mode, in case we must wait for completion * Override sync mode, in case we must wait for completion
...@@ -920,13 +916,11 @@ long wb_do_writeback(struct bdi_writeback *wb, int force_wait) ...@@ -920,13 +916,11 @@ long wb_do_writeback(struct bdi_writeback *wb, int force_wait)
if (force_wait) if (force_wait)
work->args.sync_mode = args.sync_mode = WB_SYNC_ALL; work->args.sync_mode = args.sync_mode = WB_SYNC_ALL;
post_clear = WB_SYNC_ALL || args.sb_pinned;
/* /*
* If this isn't a data integrity operation, just notify * If this isn't a data integrity operation, just notify
* that we have seen this work and we are now starting it. * that we have seen this work and we are now starting it.
*/ */
if (!post_clear) if (args.sync_mode == WB_SYNC_NONE)
wb_clear_pending(wb, work); wb_clear_pending(wb, work);
wrote += wb_writeback(wb, &args); wrote += wb_writeback(wb, &args);
...@@ -935,7 +929,7 @@ long wb_do_writeback(struct bdi_writeback *wb, int force_wait) ...@@ -935,7 +929,7 @@ long wb_do_writeback(struct bdi_writeback *wb, int force_wait)
* This is a data integrity writeback, so only do the * This is a data integrity writeback, so only do the
* notification when we have completed the work. * notification when we have completed the work.
*/ */
if (post_clear) if (args.sync_mode == WB_SYNC_ALL)
wb_clear_pending(wb, work); wb_clear_pending(wb, work);
} }
...@@ -1011,7 +1005,7 @@ static void bdi_writeback_all(struct super_block *sb, long nr_pages) ...@@ -1011,7 +1005,7 @@ static void bdi_writeback_all(struct super_block *sb, long nr_pages)
if (!bdi_has_dirty_io(bdi)) if (!bdi_has_dirty_io(bdi))
continue; continue;
bdi_alloc_queue_work(bdi, &args, 0); bdi_alloc_queue_work(bdi, &args);
} }
rcu_read_unlock(); rcu_read_unlock();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册