On Mon, Jul 18, 2022 at 03:18:52PM +0800, Ming Lei wrote: > Request queue is allocated successfully, but disk allocation may fail, > so blk_mq_exit_queue still may be missed in this case. Yes. That's a separate issue, though and solved by this one liner: diff --git a/block/blk-mq.c b/block/blk-mq.c index d716b7f3763f3..70177ee74295b 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -3960,7 +3960,7 @@ struct gendisk *__blk_mq_alloc_disk(struct blk_mq_tag_set *set, void *queuedata, disk = __alloc_disk_node(q, set->numa_node, lkclass); if (!disk) { - blk_put_queue(q); + blk_mq_destroy_queue(q); return ERR_PTR(-ENOMEM); } set_bit(GD_OWNS_QUEUE, &disk->state);