block: first batch of add_disk() error handling conversions
Subsystems (7)
v2 cover block: first batch of add_disk() error handling conversions
This v2 drops two of the scsi patches which Christoph pointed out were not needed. It also fixes the nvme driver change to account for the missing put of the ctrl. It also just appends the commits with the respective reviewed tags. I've also dropped the mmc and dm patches from this series as that is still pending discussion. I'll roll that into the my next series after discussion is done.
The only patch which goes without a review tag is the nvme driver change.
These changes go rebased on Jen's latest axboe/for-next. The respective full queue of my changes can be found on my git branch [0].
Luis Chamberlain (6):
scsi/sd: add error handling support for add_disk() scsi/sr: add error handling support for add_disk()
nvme: add error handling support for add_disk()
md: add error handling support for add_disk()
loop: add error handling support for add_disk()
nbd: add error handling support for add_disk()
drivers/block/loop.c | 9 ++++++++- drivers/block/nbd.c | 6 +++++- drivers/md/md.c | 7 ++++++- drivers/nvme/host/core.c | 9 ++++++++- drivers/scsi/sd.c | 6 +++++- drivers/scsi/sr.c | 5 ++++- 6 files changed, 36 insertions(+), 6 deletions(-)
Signature · 1 line
2.30.2
PATCH v2 1/6 scsi/sd: add error handling support for add_disk()
We never checked for errors on add_disk() as this function returned void. Now that this is fixed, use the shiny new error handling.
--- drivers/scsi/sd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/scsi/sd.c +5 -1
@@ -3487,7 +3487,11 @@ static int sd_probe(struct device *dev)pm_runtime_set_autosuspend_delay (dev, sdp->host->hostt->rpm_autosuspend_delay); } -device_add_disk (dev, gd,NULL ); + + error =device_add_disk (dev, gd,NULL ); +if (error) + goto out_free_index; +if (sdkp->capacity)sd_dif_config_host (sdkp);
Signature · 1 line
2.30.2
PATCH v2 2/6 scsi/sr: add error handling support for add_disk()
In reply to Luis ChamberlainWe never checked for errors on add_disk() as this function returned void. Now that this is fixed, use the shiny new error handling.
--- drivers/scsi/sr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/scsi/sr.c +4 -1
@@ -779,7 +779,10 @@ static int sr_probe(struct device *dev)dev_set_drvdata (dev, cd); disk->flags |=GENHD_FL_REMOVABLE ;sr_revalidate_disk (cd); -device_add_disk (&sdev->sdev_gendev, disk,NULL ); + + error =device_add_disk (&sdev->sdev_gendev, disk,NULL ); +if (error) + goto fail_minor;sdev_printk (KERN_DEBUG , sdev,"Attached scsi CD-ROM %s\n" , cd->cdi.name);
Signature · 1 line
2.30.2
PATCH v2 3/6 nvme: add error handling support for add_disk()
In reply to Luis ChamberlainWe never checked for errors on add_disk() as this function returned void. Now that this is fixed, use the shiny new error handling.
--- drivers/nvme/host/core.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
drivers/nvme/host/core.c +8 -1
@@ -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);
Signature · 1 line
2.30.2
Re: [PATCH v2 3/6] nvme: add error handling support for add_disk()
Looks good,
_______________________________________________
Linux-nvme mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-nvme
PATCH v2 4/6 md: add error handling support for add_disk()
In reply to Luis ChamberlainWe never checked for errors on add_disk() as this function returned void. Now that this is fixed, use the shiny new error handling.
We just do the unwinding of what was not done before, and are sure to unlock prior to bailing.
--- drivers/md/md.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/md/md.c +6 -1
@@ -5704,7 +5704,11 @@ static int md_alloc(dev_t dev, char *name)* through to md_open, so make sure it doesn't get too far */ mutex_lock (&mddev->open_mutex); -add_disk (disk); + error =add_disk (disk); +if (error) { +blk_cleanup_disk (disk); + goto abort_unlock; + } error =kobject_add (&mddev->kobj, &disk_to_dev (disk)->kobj,"%s" ,"md" );if (error) {
@@ -5718,6 +5722,7 @@ static int md_alloc(dev_t dev, char *name)if (mddev->kobj.sd &&sysfs_create_group (&mddev->kobj, &md_bitmap_group))pr_debug ("pointless warning\n" ); + abort_unlock:mutex_unlock (&mddev->open_mutex); abort:mutex_unlock (&disks_mutex);
Signature · 7 lines
2.30.2 _______________________________________________ Linux-nvme mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-nvme
PATCH v2 5/6 loop: add error handling support for add_disk()
In reply to Luis ChamberlainWe never checked for errors on add_disk() as this function returned void. Now that this is fixed, use the shiny new error handling.
--- drivers/block/loop.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
drivers/block/loop.c +8 -1
@@ -2393,10 +2393,17 @@ static int loop_add(int i) disk->events =DISK_EVENT_MEDIA_CHANGE ; disk->event_flags =DISK_EVENT_FLAG_UEVENT ;sprintf (disk->disk_name,"loop%d" , i); -add_disk (disk); + + err =add_disk (disk); +if (err) + goto out_cleanup_disk; +mutex_unlock (&loop_ctl_mutex); +return i; +out_cleanup_disk: +blk_cleanup_disk (disk); out_cleanup_tags:blk_mq_free_tag_set (&lo->tag_set); out_free_idr:
Signature · 7 lines
2.30.2 _______________________________________________ Linux-nvme mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-nvme
PATCH v2 6/6 nbd: add error handling support for add_disk()
In reply to Luis ChamberlainWe never checked for errors on add_disk() as this function returned void. Now that this is fixed, use the shiny new error handling.
--- drivers/block/nbd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/block/nbd.c +5 -1
@@ -1757,7 +1757,9 @@ static struct nbd_device *nbd_dev_add(int index, unsigned int refs) disk->fops = &nbd_fops; disk->private_data = nbd;sprintf (disk->disk_name,"nbd%d" , index); -add_disk (disk); + err =add_disk (disk); +if (err) + goto out_err_disk;/* * Now publish the device.
@@ -1766,6 +1768,8 @@ static struct nbd_device *nbd_dev_add(int index, unsigned int refs) nbd_total_devices++;return nbd; +out_err_disk: +blk_cleanup_disk (disk); out_free_idr:mutex_lock (&nbd_index_mutex);idr_remove (&nbd_index_idr, index);
Signature · 1 line
2.30.2