aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuis Chamberlain <mcgrof@kernel.org>2021-07-13 20:42:51 +0000
committerLuis Chamberlain <mcgrof@kernel.org>2021-07-14 20:57:35 -0700
commit9269ac480e815943f78054c276117d8300d92854 (patch)
treea34fd48a66588c285f3a7e1b60f36281c3caef72
parent5790f4698c868fbe9ca1cd48af49ebea0dc4798e (diff)
downloadlinux-next-9269ac480e815943f78054c276117d8300d92854.tar.gz
paride/pcd: capture errors on cdrom_register()
No errors were being captured wehen cdrom_register() fails, capture the error and re-use the shared handler. We check for cd->present && cd->disk->private_data before as a sanity check if the cdrom did get registered as cd->disk->private_data is only set when we successfully registered a cdrom, but cd->present may remain true even if we didn't succeed registering the cdrom. Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
-rw-r--r--drivers/block/paride/pcd.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/block/paride/pcd.c b/drivers/block/paride/pcd.c
index e63a6455e9f1a..6fa0e657b43c2 100644
--- a/drivers/block/paride/pcd.c
+++ b/drivers/block/paride/pcd.c
@@ -715,6 +715,10 @@ static void pcd_cleanup_disks(void)
for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {
if (!cd->disk)
continue;
+ if (cd->present && cd->disk->private_data) {
+ unregister_cdrom(&cd->info);
+ del_gendisk(cd->disk);
+ }
blk_cleanup_disk(cd->disk);
blk_mq_free_tag_set(&cd->tag_set);
}
@@ -1030,7 +1034,9 @@ static int __init pcd_init(void)
for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {
if (cd->present) {
- register_cdrom(cd->disk, &cd->info);
+ err = register_cdrom(cd->disk, &cd->info);
+ if (err)
+ goto pcd_cleanup_disks;
cd->disk->private_data = cd;
err = add_disk(cd->disk);
if (err)