swim: add a floppy registration bool which triggers del_gendisk()
authorLuis Chamberlain <mcgrof@kernel.org>
Mon, 27 Sep 2021 22:02:57 +0000 (15:02 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 18 Oct 2021 20:41:37 +0000 (14:41 -0600)
Instead of calling del_gendisk() on exit alone, let's add
a registration bool to the floppy disk state, this way this can
be done on the shared caller, swim_cleanup_floppy_disk().

This will be more useful in subsequent patches. Right now, this
just shuffles functionality out to a helper in a safe way.

Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Link: https://lore.kernel.org/r/20210927220302.1073499-10-mcgrof@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/swim.c

index 4f87d1af7c60aaf158b0637c89b4bb5070077cbb..eed453528f4c2e2d6d58f76760f331f2690c91c0 100644 (file)
@@ -185,6 +185,7 @@ struct floppy_state {
 
        int             track;
        int             ref_count;
+       bool registered;
 
        struct gendisk *disk;
        struct blk_mq_tag_set tag_set;
@@ -779,6 +780,9 @@ static void swim_cleanup_floppy_disk(struct floppy_state *fs)
        if (!disk)
                return;
 
+       if (fs->registered)
+               del_gendisk(fs->disk);
+
        blk_cleanup_disk(disk);
        blk_mq_free_tag_set(&fs->tag_set);
 }
@@ -840,6 +844,7 @@ static int swim_floppy_init(struct swim_priv *swd)
                swd->unit[drive].disk->private_data = &swd->unit[drive];
                set_capacity(swd->unit[drive].disk, 2880);
                add_disk(swd->unit[drive].disk);
+               swd->unit[drive].registered = true;
        }
 
        return 0;
@@ -916,10 +921,8 @@ static int swim_remove(struct platform_device *dev)
        int drive;
        struct resource *res;
 
-       for (drive = 0; drive < swd->floppy_count; drive++) {
-               del_gendisk(swd->unit[drive].disk);
+       for (drive = 0; drive < swd->floppy_count; drive++)
                swim_cleanup_floppy_disk(&swd->unit[drive]);
-       }
 
        unregister_blkdev(FLOPPY_MAJOR, "fd");