@@ -314,6 +314,7 @@ static void pcd_init_units(void)
314
314
disk -> queue = blk_mq_init_sq_queue (& cd -> tag_set , & pcd_mq_ops ,
315
315
1 , BLK_MQ_F_SHOULD_MERGE );
316
316
if (IS_ERR (disk -> queue )) {
317
+ put_disk (disk );
317
318
disk -> queue = NULL ;
318
319
continue ;
319
320
}
@@ -750,6 +751,8 @@ static int pcd_detect(void)
750
751
751
752
printk ("%s: No CD-ROM drive found\n" , name );
752
753
for (unit = 0 , cd = pcd ; unit < PCD_UNITS ; unit ++ , cd ++ ) {
754
+ if (!cd -> disk )
755
+ continue ;
753
756
blk_cleanup_queue (cd -> disk -> queue );
754
757
cd -> disk -> queue = NULL ;
755
758
blk_mq_free_tag_set (& cd -> tag_set );
@@ -1010,8 +1013,14 @@ static int __init pcd_init(void)
1010
1013
pcd_probe_capabilities ();
1011
1014
1012
1015
if (register_blkdev (major , name )) {
1013
- for (unit = 0 , cd = pcd ; unit < PCD_UNITS ; unit ++ , cd ++ )
1016
+ for (unit = 0 , cd = pcd ; unit < PCD_UNITS ; unit ++ , cd ++ ) {
1017
+ if (!cd -> disk )
1018
+ continue ;
1019
+
1020
+ blk_cleanup_queue (cd -> disk -> queue );
1021
+ blk_mq_free_tag_set (& cd -> tag_set );
1014
1022
put_disk (cd -> disk );
1023
+ }
1015
1024
return - EBUSY ;
1016
1025
}
1017
1026
@@ -1032,6 +1041,9 @@ static void __exit pcd_exit(void)
1032
1041
int unit ;
1033
1042
1034
1043
for (unit = 0 , cd = pcd ; unit < PCD_UNITS ; unit ++ , cd ++ ) {
1044
+ if (!cd -> disk )
1045
+ continue ;
1046
+
1035
1047
if (cd -> present ) {
1036
1048
del_gendisk (cd -> disk );
1037
1049
pi_release (cd -> pi );
0 commit comments