]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
null_blk: fix error flow for shared tags during module_init
authorMax Gurtovoy <maxg@mellanox.com>
Thu, 6 Jul 2017 15:00:07 +0000 (18:00 +0300)
committerJens Axboe <axboe@kernel.dk>
Thu, 6 Jul 2017 15:52:09 +0000 (09:52 -0600)
In case we use shared tags feature, blk_mq_alloc_tag_set might fail
during module initialization. In that case, fail the load with a
suitable error code. Also move the tagset initialization process after
defining the amount of submission queues.

Signed-off-by: Max Gurtovoy <maxg@mellanox.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/null_blk.c

index 71f4422eba8152bf4cbb3dbfa50bd9cd3291ac5b..85c24cace9732fa62b67afd81c827437a04adfb9 100644 (file)
@@ -844,9 +844,6 @@ static int __init null_init(void)
                queue_mode = NULL_Q_MQ;
        }
 
-       if (queue_mode == NULL_Q_MQ && shared_tags)
-               null_init_tag_set(&tag_set);
-
        if (queue_mode == NULL_Q_MQ && use_per_node_hctx) {
                if (submit_queues < nr_online_nodes) {
                        pr_warn("null_blk: submit_queues param is set to %u.",
@@ -858,11 +855,19 @@ static int __init null_init(void)
        else if (!submit_queues)
                submit_queues = 1;
 
+       if (queue_mode == NULL_Q_MQ && shared_tags) {
+               ret = null_init_tag_set(&tag_set);
+               if (ret)
+                       return ret;
+       }
+
        mutex_init(&lock);
 
        null_major = register_blkdev(0, "nullb");
-       if (null_major < 0)
-               return null_major;
+       if (null_major < 0) {
+               ret = null_major;
+               goto err_tagset;
+       }
 
        if (use_lightnvm) {
                ppa_cache = kmem_cache_create("ppa_cache", 64 * sizeof(u64),
@@ -891,6 +896,9 @@ err_dev:
        kmem_cache_destroy(ppa_cache);
 err_ppa:
        unregister_blkdev(null_major, "nullb");
+err_tagset:
+       if (queue_mode == NULL_Q_MQ && shared_tags)
+               blk_mq_free_tag_set(&tag_set);
        return ret;
 }