nvmet: return a specified error it subsys_alloc fails
authorMinwoo Im <minwoo.im.dev@gmail.com>
Sun, 7 Apr 2019 06:28:06 +0000 (15:28 +0900)
committerChristoph Hellwig <hch@lst.de>
Thu, 25 Apr 2019 14:41:26 +0000 (16:41 +0200)
nvmet_subsys_alloc() returns its pointer or NULL if it fails.  We can
see three different steps in this function:
  1. memory allocation
  2. argument check
  3. memory allocation for string

But now the callers of this function do not seem to handle case 2 by
returning -ENOMEM only even if it fails with an invalid parameter.

This patch specifies error codes so that caller can pass it to its own
caller.

Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>.
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/target/configfs.c
drivers/nvme/target/core.c
drivers/nvme/target/discovery.c

index adb7954..08dd5af 100644 (file)
@@ -898,8 +898,8 @@ static struct config_group *nvmet_subsys_make(struct config_group *group,
        }
 
        subsys = nvmet_subsys_alloc(name, NVME_NQN_NVME);
-       if (!subsys)
-               return ERR_PTR(-ENOMEM);
+       if (IS_ERR(subsys))
+               return ERR_CAST(subsys);
 
        config_group_init_type_name(&subsys->group, name, &nvmet_subsys_type);
 
index 1c1776c..24e0a36 100644 (file)
@@ -1367,7 +1367,7 @@ struct nvmet_subsys *nvmet_subsys_alloc(const char *subsysnqn,
 
        subsys = kzalloc(sizeof(*subsys), GFP_KERNEL);
        if (!subsys)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        subsys->ver = NVME_VS(1, 3, 0); /* NVMe 1.3.0 */
        /* generate a random serial number as our controllers are ephemeral: */
@@ -1383,14 +1383,14 @@ struct nvmet_subsys *nvmet_subsys_alloc(const char *subsysnqn,
        default:
                pr_err("%s: Unknown Subsystem type - %d\n", __func__, type);
                kfree(subsys);
-               return NULL;
+               return ERR_PTR(-EINVAL);
        }
        subsys->type = type;
        subsys->subsysnqn = kstrndup(subsysnqn, NVMF_NQN_SIZE,
                        GFP_KERNEL);
        if (!subsys->subsysnqn) {
                kfree(subsys);
-               return NULL;
+               return ERR_PTR(-ENOMEM);
        }
 
        kref_init(&subsys->ref);
index 33ed95e..e8e0926 100644 (file)
@@ -372,8 +372,8 @@ int __init nvmet_init_discovery(void)
 {
        nvmet_disc_subsys =
                nvmet_subsys_alloc(NVME_DISC_SUBSYS_NAME, NVME_NQN_DISC);
-       if (!nvmet_disc_subsys)
-               return -ENOMEM;
+       if (IS_ERR(nvmet_disc_subsys))
+               return PTR_ERR(nvmet_disc_subsys);
        return 0;
 }