floppy: fix add_disk() assumption on exit due to new developments
authorLuis Chamberlain <mcgrof@kernel.org>
Mon, 27 Sep 2021 22:02:50 +0000 (15:02 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 18 Oct 2021 20:41:37 +0000 (14:41 -0600)
After the patch titled "floppy: use blk_mq_alloc_disk and
blk_cleanup_disk" the floppy driver was modified to allocate
the blk_mq_alloc_disk() which allocates the disk with the
queue. This is further clarified later with the patch titled
"block: remove alloc_disk and alloc_disk_node". This clarifies
that:

   Most drivers should use and have been converted to use
   blk_alloc_disk and blk_mq_alloc_disk.  Only the scsi
   ULPs and dasd still allocate a disk separately from the
   request_queue so don't bother with convenience macros for
   something that should not see significant new users and
   remove these wrappers.

And then we have the patch titled, "block: hold a request_queue
reference for the lifetime of struct gendisk" which ensures
that a queue is *always* present for sure during the entire
lifetime of a disk.

In the floppy driver's case then the disk always comes with the
queue. So even if even if the queue was cleaned up on exit, putting
the disk *is* still required, and likewise, blk_cleanup_queue() on
a null queue should not happen now as disk->queue is valid from
disk allocation time on.

Automatic backport code scrapers should hopefully not cherry pick
this patch as a stable fix candidate without full due dilligence to
ensure all the work done on the block layer to make this happen is
merged first.

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

index 6288ce8..2ee4d3e 100644 (file)
@@ -4954,19 +4954,6 @@ static void __exit floppy_module_exit(void)
                                blk_cleanup_queue(disks[drive][i]->queue);
                }
                blk_mq_free_tag_set(&tag_sets[drive]);
-
-               /*
-                * These disks have not called add_disk().  Don't put down
-                * queue reference in put_disk().
-                */
-               if (!(allowed_drive_mask & (1 << drive)) ||
-                   fdc_state[FDC(drive)].version == FDC_NONE) {
-                       for (i = 0; i < ARRAY_SIZE(floppy_type); i++) {
-                               if (disks[drive][i])
-                                       disks[drive][i]->queue = NULL;
-                       }
-               }
-
                for (i = 0; i < ARRAY_SIZE(floppy_type); i++) {
                        if (disks[drive][i])
                                put_disk(disks[drive][i]);