Skip to content

Commit

Permalink
block/ataflop: provide a helper for cleanup up an atari disk
Browse files Browse the repository at this point in the history
[ Upstream commit deae113 ]

Instead of using two separate code paths for cleaning up an atari disk,
use one. We take the more careful approach to check for *all* disk
types, as is done on exit. The init path didn't have that check as
the alternative disk types are only probed for later, they are not
initialized by default.

Yes, there is a shared tag for all disks.

Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Link: https://lore.kernel.org/r/20210927220302.1073499-14-mcgrof@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
mcgrof authored and gregkh committed Nov 17, 2021
1 parent 4f6264e commit 4972bb9
Showing 1 changed file with 19 additions and 15 deletions.
34 changes: 19 additions & 15 deletions drivers/block/ataflop.c
Expand Up @@ -2030,6 +2030,20 @@ static void ataflop_probe(dev_t dev)
mutex_unlock(&ataflop_probe_lock);
}

static void atari_cleanup_floppy_disk(struct atari_floppy_struct *fs)
{
int type;

for (type = 0; type < NUM_DISK_MINORS; type++) {
if (!fs->disk[type])
continue;
if (fs->registered[type])
del_gendisk(fs->disk[type]);
blk_cleanup_disk(fs->disk[type]);
}
blk_mq_free_tag_set(&fs->tag_set);
}

static int __init atari_floppy_init (void)
{
int i;
Expand Down Expand Up @@ -2100,10 +2114,8 @@ static int __init atari_floppy_init (void)
return 0;

err:
while (--i >= 0) {
blk_cleanup_disk(unit[i].disk[0]);
blk_mq_free_tag_set(&unit[i].tag_set);
}
while (--i >= 0)
atari_cleanup_floppy_disk(&unit[i]);

unregister_blkdev(FLOPPY_MAJOR, "fd");
out_unlock:
Expand Down Expand Up @@ -2152,18 +2164,10 @@ __setup("floppy=", atari_floppy_setup);

static void __exit atari_floppy_exit(void)
{
int i, type;
int i;

for (i = 0; i < FD_MAX_UNITS; i++) {
for (type = 0; type < NUM_DISK_MINORS; type++) {
if (!unit[i].disk[type])
continue;
if (unit[i].registered[type])
del_gendisk(unit[i].disk[type]);
blk_cleanup_disk(unit[i].disk[type]);
}
blk_mq_free_tag_set(&unit[i].tag_set);
}
for (i = 0; i < FD_MAX_UNITS; i++)
atari_cleanup_floppy_disk(&unit[i]);
unregister_blkdev(FLOPPY_MAJOR, "fd");

del_timer_sync(&fd_timer);
Expand Down

0 comments on commit 4972bb9

Please sign in to comment.