From: Keith Busch Date: Fri, 6 Jun 2014 16:22:07 +0000 (-0600) Subject: blk-mq: don't allow queue entering for a dying queue X-Git-Tag: v3.16-rc1~47^2~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3b632cf0eaa2e89a12c18f043e6e7c5bcc003645;p=platform%2Fkernel%2Flinux-exynos.git blk-mq: don't allow queue entering for a dying queue If the queue is going away, don't let new allocs or queueing happen on it. Go through the normal wait process, and exit with ENODEV in that case. Signed-off-by: Keith Busch Signed-off-by: Jens Axboe --- diff --git a/block/blk-mq.c b/block/blk-mq.c index a6ee74e..75fc33f 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -82,8 +82,10 @@ static int blk_mq_queue_enter(struct request_queue *q) __percpu_counter_add(&q->mq_usage_counter, 1, 1000000); smp_wmb(); - /* we have problems to freeze the queue if it's initializing */ - if (!blk_queue_bypass(q) || !blk_queue_init_done(q)) + + /* we have problems freezing the queue if it's initializing */ + if (!blk_queue_dying(q) && + (!blk_queue_bypass(q) || !blk_queue_init_done(q))) return 0; __percpu_counter_add(&q->mq_usage_counter, -1, 1000000);