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;
        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:
 
 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);