cfq_exit_queue() should cancel cfq_data->unplug_work
authorOleg Nesterov <oleg@tv-sign.ru>
Tue, 23 Oct 2007 13:08:18 +0000 (15:08 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Mon, 29 Oct 2007 10:33:05 +0000 (11:33 +0100)
Spotted by Nick <gentuu@gmail.com>, perhaps explains the first trace in
http://bugzilla.kernel.org/show_bug.cgi?id=9180.

cfq_exit_queue() should cancel cfqd->unplug_work before freeing cfqd.
blk_sync_queue() seems unneeded, removed.

Q: why cfq_exit_queue() calls cfq_shutdown_timer_wq() twice?

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/cfq-iosched.c

index 54dc05439009d09968572e6f12ce30d0fef151e8..d77c9719b613272f9723ce1116e441b64efcaf05 100644 (file)
@@ -2053,7 +2053,7 @@ static void cfq_shutdown_timer_wq(struct cfq_data *cfqd)
 {
        del_timer_sync(&cfqd->idle_slice_timer);
        del_timer_sync(&cfqd->idle_class_timer);
-       blk_sync_queue(cfqd->queue);
+       kblockd_flush_work(&cfqd->unplug_work);
 }
 
 static void cfq_put_async_queues(struct cfq_data *cfqd)