diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index b865a3fa52f3..682c5a237edc 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -985,6 +985,7 @@ static void bdi_split_work_to_wbs(struct backing_dev_info *bdi, struct bdi_writeback *last_wb = NULL; struct bdi_writeback *wb = list_entry(&bdi->wb_list, struct bdi_writeback, bdi_node); + bool no_queue = true; might_sleep(); restart: @@ -1015,6 +1016,7 @@ static void bdi_split_work_to_wbs(struct backing_dev_info *bdi, *work = *base_work; work->nr_pages = nr_pages; work->auto_free = 1; + no_queue = false; wb_queue_work(wb, work); continue; } @@ -1043,6 +1045,12 @@ static void bdi_split_work_to_wbs(struct backing_dev_info *bdi, wb_wait_for_completion(&fallback_work_done); goto restart; } + + if (no_queue) { + printk("no queue\n"); + base_work->auto_free = 1; + finish_writeback_work(base_work); + } rcu_read_unlock(); if (last_wb)