Subject: block: blk_cleanup_queue() should call blk_sync_queue() From: Jens Axboe Date: Thu Oct 9 08:56:18 2008 +0200: Git: e3335de94067dbebe22e3962632ead34e832cb60 When a driver calls blk_cleanup_queue(), the device should be fully idle. However, the block layer may have pending plugging timers and the IO schedulers may have pending work in the work queues. So quisce the device by waiting for the timer and flushing the work queues. Signed-off-by: Jens Axboe Signed-off-by: Hannes Reinecke --- block/blk-core.c | 8 ++++++++ 1 file changed, 8 insertions(+) --- a/block/blk-core.c +++ b/block/blk-core.c @@ -435,6 +435,14 @@ void blk_put_queue(struct request_queue void blk_cleanup_queue(struct request_queue *q) { + /* + * We know we have process context here, so we can be a little + * cautious and ensure that pending block actions on this device + * are done before moving on. Going into this function, we should + * not have processes doing IO to this device. + */ + blk_sync_queue(q); + mutex_lock(&q->sysfs_lock); queue_flag_set_unlocked(QUEUE_FLAG_DEAD, q); mutex_unlock(&q->sysfs_lock);