return;
 
        mutex_lock(&floppy_probe_lock);
-       if (!disks[drive][type]) {
-               if (floppy_alloc_disk(drive, type) == 0)
-                       add_disk(disks[drive][type]);
-       }
+       if (disks[drive][type])
+               goto out;
+       if (floppy_alloc_disk(drive, type))
+               goto out;
+       if (add_disk(disks[drive][type]))
+               goto cleanup_disk;
+out:
+       mutex_unlock(&floppy_probe_lock);
+       return;
+
+cleanup_disk:
+       blk_cleanup_disk(disks[drive][type]);
+       disks[drive][type] = NULL;
        mutex_unlock(&floppy_probe_lock);
 }