ide: fix regression caused by ide_device_{get,put}() addition (take 2)
[linux-2.6.git] / drivers / scsi / ide-scsi.c
index b40a673..461331d 100644 (file)
@@ -102,11 +102,10 @@ static struct ide_scsi_obj *ide_scsi_get(struct gendisk *disk)
        mutex_lock(&idescsi_ref_mutex);
        scsi = ide_scsi_g(disk);
        if (scsi) {
-               scsi_host_get(scsi->host);
-               if (ide_device_get(scsi->drive)) {
-                       scsi_host_put(scsi->host);
+               if (ide_device_get(scsi->drive))
                        scsi = NULL;
-               }
+               else
+                       scsi_host_get(scsi->host);
        }
        mutex_unlock(&idescsi_ref_mutex);
        return scsi;
@@ -114,9 +113,11 @@ static struct ide_scsi_obj *ide_scsi_get(struct gendisk *disk)
 
 static void ide_scsi_put(struct ide_scsi_obj *scsi)
 {
+       ide_drive_t *drive = scsi->drive;
+
        mutex_lock(&idescsi_ref_mutex);
-       ide_device_put(scsi->drive);
        scsi_host_put(scsi->host);
+       ide_device_put(drive);
        mutex_unlock(&idescsi_ref_mutex);
 }