diff options
Diffstat (limited to 'drivers/block/floppy.c')
-rw-r--r-- | drivers/block/floppy.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c index 95e528799737..9d900e6aba55 100644 --- a/drivers/block/floppy.c +++ b/drivers/block/floppy.c @@ -4337,6 +4337,11 @@ out_put_disk: if (disks[drive]->queue) { del_timer_sync(&motor_off_timer[drive]); blk_cleanup_queue(disks[drive]->queue); + /* + * put_disk() is not paired with add_disk() and + * will put queue reference one extra time. fix it. + */ + disks[drive]->queue = NULL; } put_disk(disks[drive]); } @@ -4565,6 +4570,14 @@ static void __exit floppy_module_exit(void) } blk_cleanup_queue(disks[drive]->queue); + /* + * 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) + disks[drive]->queue = NULL; + put_disk(disks[drive]); } |