block: first batch of add_disk() error handling conversions
Subsystems (7)
v3 cover block: first batch of add_disk() error handling conversions
Jens,
I think this first set is ready, but pending review of just two patches:
* mmc/core/block
* dm
All other patches have a respective Reviewed-by tag. The above two patches were integrated back into the series once I understood Christoph's concerns, and adjusted the patch as such.
This goes rebased onto your for-next as of today. If anyone wants to explore the pending full set this is up on my linux-next branch 20210830-for-axboe-add-disk-error-handling-next [0].
Luis Chamberlain (8):
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() mmc/core/block: add error handling support for add_disk()
md: add error handling support for add_disk()
dm: add add_disk() error handling
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/dm.c | 4 +++- drivers/md/md.c | 7 ++++++- drivers/mmc/core/block.c | 7 ++++++- drivers/nvme/host/core.c | 9 ++++++++- drivers/scsi/sd.c | 6 +++++- drivers/scsi/sr.c | 5 ++++- 8 files changed, 45 insertions(+), 8 deletions(-)
Signature · 7 lines
2.30.2 _______________________________________________ Linux-nvme mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-nvme
PATCH v3 1/8 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
Re: [PATCH v3 1/8] scsi/sd: add error handling support for add_disk()
Quoted 10 lines · Luis Chamberlain
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 <[email protected]>Signed-off-by Luis Chamberlain <[email protected]>--- drivers/scsi/sd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
Cheers,
Hannes
Signature · 4 lines
Dr. Hannes Reinecke Kernel Storage Architect [email protected] +49 911 74053 688 SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
Re: [PATCH v3 1/8] scsi/sd: add error handling support for add_disk()
In reply to Luis ChamberlainQuoted 15 lines · Luis Chamberlain
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 <[email protected]>Signed-off-by Luis Chamberlain <[email protected]>--- drivers/scsi/sd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)drivers/scsi/sd.c +0
-0
drivers/scsi/sd.c static int sd_probe(struct device *dev) · line 3494
Quoted 9 lines
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; +
The error handling is actually wrong, see
https://lore.kernel.org/linux-scsi/[email protected]/T/#t
Maybe you can base on that patch.
Thanks,
Ming
Re: [PATCH v3 1/8] scsi/sd: add error handling support for add_disk()
Quoted 28 lines · Ming Lei
Quoted 15 lines · Luis Chamberlain
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 <[email protected]>Signed-off-by Luis Chamberlain <[email protected]>--- drivers/scsi/sd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)drivers/scsi/sd.c +0
-0drivers/scsi/sd.c static int sd_probe(struct device *dev) · line 3494
Quoted 9 lines
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; +The error handling is actually wrong, see
Quoted 3 lines
https://lore.kernel.org/linux-scsi/[email protected]/T/#tMaybe you can base on that patch.
Done, thanks!
Luis
PATCH v3 2/8 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 · 7 lines
2.30.2 _______________________________________________ Linux-nvme mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-nvme
Re: [PATCH v3 2/8] scsi/sr: add error handling support for add_disk()
Quoted 10 lines · Luis Chamberlain
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 <[email protected]>Signed-off-by Luis Chamberlain <[email protected]>--- drivers/scsi/sr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
Cheers,
Hannes
Signature · 4 lines
Dr. Hannes Reinecke Kernel Storage Architect [email protected] +49 911 74053 688 SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
Re: [PATCH v3 2/8] scsi/sr: add error handling support for add_disk()
In reply to Luis ChamberlainQuoted 15 lines · Luis Chamberlain
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 <[email protected]>Signed-off-by Luis Chamberlain <[email protected]>--- drivers/scsi/sr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)drivers/scsi/sr.c +0
-0
drivers/scsi/sr.c static int sr_probe(struct device *dev) · line 785
Quoted 8 lines
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;
You don't undo register_cdrom(), maybe you can use kref_put(&cd->kref, sr_kref_release); to simplify the error handling.
Thanks,
Ming
Re: [PATCH v3 2/8] scsi/sr: add error handling support for add_disk()
Quoted 11 lines · Ming Lei
Quoted 10 lines · Luis Chamberlain
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 <[email protected]>Signed-off-by Luis Chamberlain <[email protected]>--- drivers/scsi/sr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
Quoted 16 lines
drivers/scsi/sr.c static int sr_probe(struct device *dev) · line 785
Quoted 13 lines
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;You don't undo
register_cdrom(), maybe you can usekref_put(&cd->kref, sr_kref_release); to simplify the error handling.
Works with me, thanks!
Luis
PATCH v3 3/8 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 · 7 lines
2.30.2 _______________________________________________ Linux-nvme mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-nvme
Re: [PATCH v3 3/8] nvme: add error handling support for add_disk()
Quoted 28 lines · Luis Chamberlain
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 <[email protected]>Signed-off-by Luis Chamberlain <[email protected]>--- drivers/nvme/host/core.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)drivers/nvme/host/core.c +3
-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,
drivers/nvme/host/core.c static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid, · line 3785
Quoted 10 lines
drivers/nvme/host/core.c +5
-0return ; + 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.
Cheers,
Hannes
Signature · 4 lines
Dr. Hannes Reinecke Kernel Storage Architect [email protected] +49 911 74053 688 SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
Christoph Hellwig
maintainerRe: [PATCH v3 3/8] nvme: add error handling support for add_disk()
Quoted 3 lines · Hannes Reinecke
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.
Re: [PATCH v3 3/8] nvme: add error handling support for add_disk()
In reply to Luis ChamberlainThanks,
applied to nvme-5.15.
PATCH v3 4/8 mmc/core/block: 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.
The caller only cleanups the disk if we pass on an allocated md but on error we return return ERR_PTR(ret), and so we must do all the unwinding ourselves.
--- drivers/mmc/core/block.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/mmc/core/block.c +6 -1
@@ -2453,9 +2453,14 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,/* used in ->open, must be set before add_disk: */ if (area_type ==MMC_BLK_DATA_AREA_MAIN )dev_set_drvdata (&card->dev, md); -device_add_disk (md->parent, md->disk, mmc_disk_attr_groups); + ret =device_add_disk (md->parent, md->disk, mmc_disk_attr_groups); +if (ret) + goto err_cleanup_queue;return md; + err_cleanup_queue: +blk_cleanup_queue (md->disk->queue); +blk_mq_free_tag_set (&md->queue.tag_set); err_kfree:kfree (md); out:
Signature · 1 line
2.30.2
Ulf Hansson
AppliedRe: [PATCH v3 4/8] mmc/core/block: add error handling support for add_disk()
Quoted 10 lines · Luis Chamberlain
We never checked for errors on
add_disk()as this function returned void. Now that this is fixed, use the shiny new error handling.The caller only cleanups the disk if we pass on an allocated md but on error we return return
ERR_PTR(ret), and so we must do all the unwinding ourselves.Signed-off-by Luis Chamberlain <[email protected]>
Queued for v5.16 on the temporary devel branch, thanks!
Kind regards
Uffe
Quoted 27 lines
--- drivers/mmc/core/block.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)drivers/mmc/core/block.c +6
-2@@ -2453,9 +2453,14 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card,/* used in ->open, must be set before add_disk: */ if (area_type ==MMC_BLK_DATA_AREA_MAIN )dev_set_drvdata (&card->dev, md); -device_add_disk (md->parent, md->disk, mmc_disk_attr_groups); + ret =device_add_disk (md->parent, md->disk, mmc_disk_attr_groups); +if (ret) + goto err_cleanup_queue;return md; + err_cleanup_queue: +blk_cleanup_queue (md->disk->queue); +blk_mq_free_tag_set (&md->queue.tag_set); err_kfree:kfree (md); out: --2.30.2
PATCH v3 5/8 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 · 1 line
2.30.2
Re: [PATCH v3 5/8] md: add error handling support for add_disk()
Quoted 4 lines · Luis Chamberlain
We never checked for errors on
add_disk()as this function returned void. Now that this is fixed, use the shiny new error handling.
Quoted 9 lines
We just do the unwinding of what was not done before, and are sure to unlock prior to bailing.
Reviewed-by Christoph Hellwig <[email protected]>Signed-off-by Luis Chamberlain <[email protected]>--- drivers/md/md.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
Cheers,
Hannes
Signature · 4 lines
Dr. Hannes Reinecke Kernel Storage Architect [email protected] +49 911 74053 688 SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
PATCH v3 6/8 dm: add add_disk() error handling
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.
There are two calls to dm_setup_md_queue() which can fail then, one on dm_early_create() and we can easily see that the error path there calls dm_destroy in the error path. The other use case is on the ioctl table_load case. If that fails userspace needs to call the DM_DEV_REMOVE_CMD to cleanup the state - similar to any other failure.
--- drivers/md/dm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/md/dm.c +3 -1
@@ -2077,7 +2077,9 @@ int dm_setup_md_queue(struct mapped_device *md, struct dm_table *t)if (r)return r; -add_disk (md->disk); + r =add_disk (md->disk); +if (r) +return r; r =dm_sysfs_init (md);if (r) {
Signature · 1 line
2.30.2
Re: [PATCH v3 6/8] dm: add add_disk() error handling
Quoted 11 lines · Luis Chamberlain
We never checked for errors on
add_disk()as this function returned void. Now that this is fixed, use the shiny new error handling.There are two calls to
dm_setup_md_queue()which can fail then, one ondm_early_create()and we can easily see that the error path there callsdm_destroyin the error path. The other use case is on the ioctltable_loadcase. If that fails userspace needs to call theDM_DEV_REMOVE_CMDto cleanup the state - similar to any other failure.
Quoted 5 lines
Signed-off-by Luis Chamberlain <[email protected]>--- drivers/md/dm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Cheers,
Hannes
Signature · 4 lines
Dr. Hannes Reinecke Kernel Storage Architect [email protected] +49 911 74053 688 SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
PATCH v3 7/8 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 · 1 line
2.30.2
Re: [PATCH v3 7/8] loop: add error handling support for add_disk()
Quoted 10 lines · Luis Chamberlain
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 <[email protected]>Signed-off-by Luis Chamberlain <[email protected]>--- drivers/block/loop.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
Cheers,
Hannes
Signature · 4 lines
Dr. Hannes Reinecke Kernel Storage Architect [email protected] +49 911 74053 688 SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
PATCH v3 8/8 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
Re: [PATCH v3 8/8] nbd: add error handling support for add_disk()
Quoted 10 lines · Luis Chamberlain
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 <[email protected]>Signed-off-by Luis Chamberlain <[email protected]>--- drivers/block/nbd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
Cheers,
Hannes
Signature · 4 lines
Dr. Hannes Reinecke Kernel Storage Architect [email protected] +49 911 74053 688 SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
Quoted 7 lines · Luis Chamberlain
Jens,
I think this first set is ready, but pending review of just two patches:
* mmc/core/block
* dm
Quoted 7 lines
All other patches have a respective Reviewed-by tag. The above two patches were integrated back into the series once I understood Christoph's concerns, and adjusted the patch as such.
This goes rebased onto your for-next as of today. If anyone wants to explore the pending full set this is up on my linux-next branch 20210830-for-axboe-add-disk-error-handling-next [0].
Are the changes by add_disk() made atomically against the caller? If there is a moment where "struct block_device_operations"->open can be called when add_disk() might still fail, how is it protected from the kfree() path?
Quoted 23 lines
Luis Chamberlain (8):
scsi/sd: add error handling support foradd_disk()scsi/sr: add error handling support foradd_disk()
nvme: add error handling support foradd_disk()mmc/core/block: add error handling support foradd_disk()
md: add error handling support foradd_disk()
dm: addadd_disk()error handling
loop: add error handling support foradd_disk()
nbd: add error handling support foradd_disk()drivers/block/loop.c | 9 ++++++++- drivers/block/nbd.c | 6 +++++- drivers/md/dm.c | 4 +++- drivers/md/md.c | 7 ++++++- drivers/mmc/core/block.c | 7 ++++++- drivers/nvme/host/core.c | 9 ++++++++- drivers/scsi/sd.c | 6 +++++- drivers/scsi/sr.c | 5 ++++- 8 files changed, 45 insertions(+), 8 deletions(-)
Quoted 4 lines · Tetsuo Handa
Are the changes by
add_disk()made atomically against the caller? If there is a moment where "struct block_device_operations"->open can be called whenadd_disk()might still fail, how is it protected from thekfree()path?
The new add_disk is structured so tht it won't fail after the block device inode is hashed. That is, the last possible failure is before ->open can be called.