]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ublk: reorder tag_set initialization before queue allocation
authorMing Lei <ming.lei@redhat.com>
Sat, 1 Nov 2025 13:31:16 +0000 (21:31 +0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 3 Nov 2025 15:34:59 +0000 (08:34 -0700)
Move ublk_add_tag_set() before ublk_init_queues() in the device
initialization path. This allows us to use the blk-mq CPU-to-queue
mapping established by the tag_set to determine the appropriate
NUMA node for each queue allocation.

The error handling paths are also reordered accordingly.

Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/ublk_drv.c

index 0c74a41a67530013ecd978d460cfca11e4995fa9..2569566bf5e6e157b1e437d8bfeac257d5cd050c 100644 (file)
@@ -3178,17 +3178,17 @@ static int ublk_ctrl_add_dev(const struct ublksrv_ctrl_cmd *header)
                        ub->dev_info.nr_hw_queues, nr_cpu_ids);
        ublk_align_max_io_size(ub);
 
-       ret = ublk_init_queues(ub);
+       ret = ublk_add_tag_set(ub);
        if (ret)
                goto out_free_dev_number;
 
-       ret = ublk_add_tag_set(ub);
+       ret = ublk_init_queues(ub);
        if (ret)
-               goto out_deinit_queues;
+               goto out_free_tag_set;
 
        ret = -EFAULT;
        if (copy_to_user(argp, &ub->dev_info, sizeof(info)))
-               goto out_free_tag_set;
+               goto out_deinit_queues;
 
        /*
         * Add the char dev so that ublksrv daemon can be setup.
@@ -3197,10 +3197,10 @@ static int ublk_ctrl_add_dev(const struct ublksrv_ctrl_cmd *header)
        ret = ublk_add_chdev(ub);
        goto out_unlock;
 
-out_free_tag_set:
-       blk_mq_free_tag_set(&ub->tag_set);
 out_deinit_queues:
        ublk_deinit_queues(ub);
+out_free_tag_set:
+       blk_mq_free_tag_set(&ub->tag_set);
 out_free_dev_number:
        ublk_free_dev_number(ub);
 out_free_ub: