paride/pcd: cleanup queues when detection fails
authorJens Axboe <axboe@kernel.dk>
Mon, 18 Mar 2019 14:10:32 +0000 (08:10 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 18 Mar 2019 14:10:32 +0000 (08:10 -0600)
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>
drivers/block/paride/pcd.c

index 96670eefaeb2c3458964110a39bddd942ff9fde1..377a694dc22814b9d040a64a9d3ffd7666f5a6a4 100644 (file)
@@ -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;
 }