Message ID | 20210823202930.137278-6-mcgrof@kernel.org |
---|---|
State | New |
Headers | show |
Series | [01/10] scsi/sd: use blk_cleanup_queue() insted of put_disk() | expand |
On Mon, Aug 23, 2021 at 01:29:25PM -0700, Luis Chamberlain wrote: > + rc = device_add_disk(ctrl->device, ns->disk, nvme_ns_id_attr_groups); > + if (rc) > + goto out_cleanup_ns_from_list; > + Nit: no real need for the rc variable here as we never use the actual value. > if (!nvme_ns_head_multipath(ns->head)) > nvme_add_ns_cdev(ns); > > @@ -3785,6 +3789,10 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid, > > return; > > + out_cleanup_ns_from_list: > + down_write(&ctrl->namespaces_rwsem); > + list_del_init(&ns->list); > + up_write(&ctrl->namespaces_rwsem); This also needs to do a nvme_put_ctrl.
On Tue, Aug 24, 2021 at 07:09:37AM +0100, Christoph Hellwig wrote: > On Mon, Aug 23, 2021 at 01:29:25PM -0700, Luis Chamberlain wrote: > > + rc = device_add_disk(ctrl->device, ns->disk, nvme_ns_id_attr_groups); > > + if (rc) > > + goto out_cleanup_ns_from_list; > > + > > Nit: no real need for the rc variable here as we never use the actual > value. Alrighty. > > if (!nvme_ns_head_multipath(ns->head)) > > nvme_add_ns_cdev(ns); > > > > @@ -3785,6 +3789,10 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid, > > > > return; > > > > + out_cleanup_ns_from_list: > > + down_write(&ctrl->namespaces_rwsem); > > + list_del_init(&ns->list); > > + up_write(&ctrl->namespaces_rwsem); > > This also needs to do a nvme_put_ctrl. Fixed. Luis
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 68acd33c3856..fe02e95173d8 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -3720,6 +3720,7 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid, struct gendisk *disk; struct nvme_id_ns *id; int node = ctrl->numa_node; + int rc; if (nvme_identify_ns(ctrl, nsid, ids, &id)) return; @@ -3775,7 +3776,10 @@ 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); + rc = device_add_disk(ctrl->device, ns->disk, nvme_ns_id_attr_groups); + if (rc) + goto out_cleanup_ns_from_list; + if (!nvme_ns_head_multipath(ns->head)) nvme_add_ns_cdev(ns); @@ -3785,6 +3789,10 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid, return; + out_cleanup_ns_from_list: + 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);
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> --- drivers/nvme/host/core.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)