From d1f847829c4b3afb21035618b6f0841b18166c3c Mon Sep 17 00:00:00 2001 From: Ming Lei Date: Wed, 8 Nov 2017 09:11:22 +0800 Subject: [PATCH] blk-mq: put driver tag if dispatch budget can't be got We have to put the driver tag if dispatch budget can't be got, otherwise it might cause IO deadlock, especially in case that size of tags is very small. Fixes: b7a5561ef652(blk-mq: introduce .get_budget and .put_budget in blk_mq_ops) Signed-off-by: Ming Lei Signed-off-by: Jens Axboe --- block/blk-mq.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/block/blk-mq.c b/block/blk-mq.c index c501cbd0de93f..3d759bb8a5bb5 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -1080,8 +1080,10 @@ bool blk_mq_dispatch_rq_list(struct request_queue *q, struct list_head *list, } } - if (!got_budget && !blk_mq_get_dispatch_budget(hctx)) + if (!got_budget && !blk_mq_get_dispatch_budget(hctx)) { + blk_mq_put_driver_tag(rq); break; + } list_del_init(&rq->queuelist); -- 2.39.5