Message ID | 20210830212538.148729-4-mcgrof@kernel.org |
---|---|
State | New |
Headers | show |
Series | block: first batch of add_disk() error handling conversions | expand |
On 8/30/21 11:25 PM, Luis Chamberlain wrote: > We never checked for errors on add_disk() as this function > returned void. Now that this is fixed, use the shiny new > error handling. > > Reviewed-by: Christoph Hellwig <hch@lst.de> > Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> > --- > drivers/nvme/host/core.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c > index 8679a108f571..687d3be563a3 100644 > --- a/drivers/nvme/host/core.c > +++ b/drivers/nvme/host/core.c > @@ -3763,7 +3763,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); > > @@ -3773,6 +3775,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); > I would rather turn this around, and call 'nvme_put_ctrl()' after removing the namespace from the list. But it's probably more a style issue, come to think of it. Reviewed-by: Hannes Reinecke <hare@suse.de> Cheers, Hannes
On Mon, Sep 06, 2021 at 08:16:35AM +0200, Hannes Reinecke wrote: > I would rather turn this around, and call 'nvme_put_ctrl()' after removing > the namespace from the list. But it's probably more a style issue, come to > think of it. The order in the patch is the inverse of the order before the failure, which generally is the right thing to do.
Thanks, applied to nvme-5.15.
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index 8679a108f571..687d3be563a3 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -3763,7 +3763,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); @@ -3773,6 +3775,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);