[PATCH V2 2/2] block: drain blkcg part of request_queue in blk_cleanup_queue()
From: Ming Lei <hidden>
Date: 2017-11-23 04:48:36
Subsystem:
block layer, the rest · Maintainers:
Jens Axboe, Linus Torvalds
From: Ming Lei <hidden>
Date: 2017-11-23 04:48:36
Subsystem:
block layer, the rest · Maintainers:
Jens Axboe, Linus Torvalds
Now once blk_freeze_queue() returns, all requests(in-queue and pending) can be drained, but we still need to drain blkcg part of request_queue for both blk-mq and legacy, so this patch calls blkcg_drain_queue() explicitely in blk_cleanup_queue() to do that. Then the __blk_drain_queue() in blk_cleanup_queue() can be covered by both blk_freeze_queue() and blkcg_drain_queue(), and tasks blocked in get_request() are waken up in blk_set_queue_dying() too, so remove it from blk_cleanup_queue(). Cc: Wen Xiong <redacted> Cc: Mauricio Faria de Oliveira <redacted> Signed-off-by: Ming Lei <redacted> --- block/blk-core.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/block/blk-core.c b/block/blk-core.c
index 1038706edd87..f3f6f11a5b31 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c@@ -689,8 +689,7 @@ void blk_cleanup_queue(struct request_queue *q) */ blk_freeze_queue(q); spin_lock_irq(lock); - if (!q->mq_ops) - __blk_drain_queue(q, true); + blkcg_drain_queue(q); queue_flag_set(QUEUE_FLAG_DEAD, q); spin_unlock_irq(lock);
--
2.9.5