]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
nvme: lift the check for an unallocated namespace into nvme_identify_ns
authorChristoph Hellwig <hch@lst.de>
Mon, 28 Sep 2020 10:33:19 +0000 (12:33 +0200)
committerChristoph Hellwig <hch@lst.de>
Wed, 7 Oct 2020 05:56:18 +0000 (07:56 +0200)
Move the check from the two callers into the common helper.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
drivers/nvme/host/core.c

index fede487f6e043fe6759fd08d641c55613acc22c0..7b1423c7e7fc588e01777205b353dea0cc572ee3 100644 (file)
@@ -1381,9 +1381,16 @@ static int nvme_identify_ns(struct nvme_ctrl *ctrl,
        error = nvme_submit_sync_cmd(ctrl->admin_q, &c, *id, sizeof(**id));
        if (error) {
                dev_warn(ctrl->device, "Identify namespace failed (%d)\n", error);
-               kfree(*id);
+               goto out_free_id;
        }
 
+       error = -ENODEV;
+       if ((*id)->ncap == 0) /* namespace not allocated or attached */
+               goto out_free_id;
+       return 0;
+
+out_free_id:
+       kfree(*id);
        return error;
 }
 
@@ -2169,11 +2176,6 @@ static int nvme_validate_ns(struct nvme_ns *ns)
        if (ret)
                goto out;
 
-       if (id->ncap == 0) {
-               ret = -ENODEV;
-               goto free_id;
-       }
-
        ret = nvme_report_ns_ids(ctrl, ns->head->ns_id, id, &ids);
        if (ret)
                goto free_id;
@@ -3913,9 +3915,6 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid)
        if (ret)
                goto out_free_queue;
 
-       if (id->ncap == 0)      /* no namespace (legacy quirk) */
-               goto out_free_id;
-
        ret = nvme_init_ns_head(ns, nsid, id);
        if (ret)
                goto out_free_id;