summaryrefslogtreecommitdiff
path: root/drivers/block/swim.c
diff options
context:
space:
mode:
authorOmar Sandoval <osandov@fb.com>2018-10-11 12:20:41 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-11-13 11:14:52 -0800
commit8ac8e0fecd5e36caf0bdb34ccb9e6dc4853c62b3 (patch)
treefb16915a22912716dd4774d9fa52f892bd4ae1f5 /drivers/block/swim.c
parent7084b74ffc246e781c77a963321f34b661ea49cc (diff)
swim: fix cleanup on setup error
[ 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>
Diffstat (limited to 'drivers/block/swim.c')
-rw-r--r--drivers/block/swim.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/block/swim.c b/drivers/block/swim.c
index e88d50f75a4a..58e308145e95 100644
--- a/drivers/block/swim.c
+++ b/drivers/block/swim.c
@@ -887,8 +887,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;
}