]> www.infradead.org Git - nvme.git/commitdiff
blk-mq: setup queue ->tag_set before initializing hctx
authorMing Lei <ming.lei@redhat.com>
Mon, 14 Oct 2024 00:51:15 +0000 (08:51 +0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 14 Oct 2024 14:17:07 +0000 (08:17 -0600)
Commit 7b815817aa58 ("blk-mq: add helper for checking if one CPU is mapped to specified hctx")
needs to check queue mapping via tag set in hctx's cpuhp handler.

However, q->tag_set may not be setup yet when the cpuhp handler is
enabled, then kernel oops is triggered.

Fix the issue by setup queue tag_set before initializing hctx.

Cc: stable@vger.kernel.org
Reported-and-tested-by: Rick Koch <mr.rickkoch@gmail.com>
Closes: https://lore.kernel.org/linux-block/CANa58eeNDozLaBHKPLxSAhEy__FPfJT_F71W=sEQw49UCrC9PQ@mail.gmail.com
Fixes: 7b815817aa58 ("blk-mq: add helper for checking if one CPU is mapped to specified hctx")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: John Garry <john.g.garry@oracle.com>
Link: https://lore.kernel.org/r/20241014005115.2699642-1-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c

index 4b2c8e940f5913001956ff8a6e7f450c756e34be..cf626e061dd7747cbdebfbd5aba037ac8ef92521 100644 (file)
@@ -4310,6 +4310,12 @@ int blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
        /* mark the queue as mq asap */
        q->mq_ops = set->ops;
 
+       /*
+        * ->tag_set has to be setup before initialize hctx, which cpuphp
+        * handler needs it for checking queue mapping
+        */
+       q->tag_set = set;
+
        if (blk_mq_alloc_ctxs(q))
                goto err_exit;
 
@@ -4328,8 +4334,6 @@ int blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
        INIT_WORK(&q->timeout_work, blk_mq_timeout_work);
        blk_queue_rq_timeout(q, set->timeout ? set->timeout : 30 * HZ);
 
-       q->tag_set = set;
-
        q->queue_flags |= QUEUE_FLAG_MQ_DEFAULT;
 
        INIT_DELAYED_WORK(&q->requeue_work, blk_mq_requeue_work);