diff options
| author | Luis Chamberlain <mcgrof@kernel.org> | 2021-07-13 20:42:51 +0000 |
|---|---|---|
| committer | Luis Chamberlain <mcgrof@kernel.org> | 2021-07-14 20:57:35 -0700 |
| commit | 9269ac480e815943f78054c276117d8300d92854 (patch) | |
| tree | a34fd48a66588c285f3a7e1b60f36281c3caef72 | |
| parent | 5790f4698c868fbe9ca1cd48af49ebea0dc4798e (diff) | |
| download | linux-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.c | 8 |
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) |
