nvme: add error handling support for add_disk()
authorLuis Chamberlain <mcgrof@kernel.org>
Mon, 30 Aug 2021 21:25:33 +0000 (14:25 -0700)
committerChristoph Hellwig <hch@lst.de>
Mon, 6 Sep 2021 08:08:09 +0000 (10:08 +0200)
We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.

Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/core.c

index 4a3a33f..7efb31b 100644 (file)
@@ -3798,7 +3798,9 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid,
 
        nvme_get_ctrl(ctrl);
 
-       device_add_disk(ctrl->device, ns->disk, nvme_ns_id_attr_groups);
+       if (device_add_disk(ctrl->device, ns->disk, nvme_ns_id_attr_groups))
+               goto out_cleanup_ns_from_list;
+
        if (!nvme_ns_head_multipath(ns->head))
                nvme_add_ns_cdev(ns);
 
@@ -3808,6 +3810,11 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid,
 
        return;
 
+ out_cleanup_ns_from_list:
+       nvme_put_ctrl(ctrl);
+       down_write(&ctrl->namespaces_rwsem);
+       list_del_init(&ns->list);
+       up_write(&ctrl->namespaces_rwsem);
  out_unlink_ns:
        mutex_lock(&ctrl->subsys->lock);
        list_del_rcu(&ns->siblings);