ide: fix regression caused by ide_device_{get,put}() addition (take 2)
[linux-2.6.git] / drivers / ide / ide-floppy.c
index ca11a26..e9034c0 100644 (file)
@@ -167,11 +167,10 @@ static struct ide_floppy_obj *ide_floppy_get(struct gendisk *disk)
        mutex_lock(&idefloppy_ref_mutex);
        floppy = ide_floppy_g(disk);
        if (floppy) {
-               kref_get(&floppy->kref);
-               if (ide_device_get(floppy->drive)) {
-                       kref_put(&floppy->kref, idefloppy_cleanup_obj);
+               if (ide_device_get(floppy->drive))
                        floppy = NULL;
-               }
+               else
+                       kref_get(&floppy->kref);
        }
        mutex_unlock(&idefloppy_ref_mutex);
        return floppy;
@@ -179,9 +178,11 @@ static struct ide_floppy_obj *ide_floppy_get(struct gendisk *disk)
 
 static void ide_floppy_put(struct ide_floppy_obj *floppy)
 {
+       ide_drive_t *drive = floppy->drive;
+
        mutex_lock(&idefloppy_ref_mutex);
-       ide_device_put(floppy->drive);
        kref_put(&floppy->kref, idefloppy_cleanup_obj);
+       ide_device_put(drive);
        mutex_unlock(&idefloppy_ref_mutex);
 }