swim: fix cleanup on setup error
authorOmar Sandoval <osandov@fb.com>
Thu, 11 Oct 2018 19:20:41 +0000 (12:20 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 13 Nov 2018 19:16:49 +0000 (11:16 -0800)
[ Upstream commit 1448a2a5360ae06f25e2edc61ae070dff5c0beb4 ]

If we fail to allocate the request queue for a disk, we still need to
free that disk, not just the previous ones. Additionally, we need to
cleanup the previous request queues.

Signed-off-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/block/swim.c

index b5afd495d482e8971be1cc431bb7b0ea8b54cae2..eec6e393c124d1e62edaa9f8aee94728540c5167 100644 (file)
@@ -868,8 +868,17 @@ static int swim_floppy_init(struct swim_priv *swd)
 
 exit_put_disks:
        unregister_blkdev(FLOPPY_MAJOR, "fd");
-       while (drive--)
-               put_disk(swd->unit[drive].disk);
+       do {
+               struct gendisk *disk = swd->unit[drive].disk;
+
+               if (disk) {
+                       if (disk->queue) {
+                               blk_cleanup_queue(disk->queue);
+                               disk->queue = NULL;
+                       }
+                       put_disk(disk);
+               }
+       } while (drive--);
        return err;
 }