aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2019-03-18 08:10:32 -0600
committerJens Axboe <axboe@kernel.dk>2019-03-18 08:10:32 -0600
commit81b74ac68c28fddb3589ad5d4d5e587baf4bb781 (patch)
tree79c66628783124bbb51cd4815801080f0fffaa09
parentparide/pf: cleanup queues when detection fails (diff)
downloadlinux-dev-81b74ac68c28fddb3589ad5d4d5e587baf4bb781.tar.xz
linux-dev-81b74ac68c28fddb3589ad5d4d5e587baf4bb781.zip
paride/pcd: cleanup queues when detection fails
The driver allocates queues for all the units it potentially supports. But if we fail to detect any drives, then we fail loading the module without cleaning up those queues. This is now evident with the switch to blk-mq, though the bug has been there forever as far as I can tell. Also fix cleanup through regular module exit. Reported-by: Randy Dunlap <rdunlap@infradead.org> Tested-by: Randy Dunlap <rdunlap@infradead.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--drivers/block/paride/pcd.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/block/paride/pcd.c b/drivers/block/paride/pcd.c
index 96670eefaeb2..377a694dc228 100644
--- a/drivers/block/paride/pcd.c
+++ b/drivers/block/paride/pcd.c
@@ -749,8 +749,12 @@ static int pcd_detect(void)
return 0;
printk("%s: No CD-ROM drive found\n", name);
- for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++)
+ for (unit = 0, cd = pcd; unit < PCD_UNITS; unit++, cd++) {
+ blk_cleanup_queue(cd->disk->queue);
+ cd->disk->queue = NULL;
+ blk_mq_free_tag_set(&cd->tag_set);
put_disk(cd->disk);
+ }
pi_unregister_driver(par_drv);
return -1;
}