diff options
Diffstat (limited to 'drivers/ide/ide-disk.c')
-rw-r--r-- | drivers/ide/ide-disk.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index 28d85b410f7c..68b9cf0138b0 100644 --- a/drivers/ide/ide-disk.c +++ b/drivers/ide/ide-disk.c | |||
@@ -65,11 +65,10 @@ static struct ide_disk_obj *ide_disk_get(struct gendisk *disk) | |||
65 | mutex_lock(&idedisk_ref_mutex); | 65 | mutex_lock(&idedisk_ref_mutex); |
66 | idkp = ide_disk_g(disk); | 66 | idkp = ide_disk_g(disk); |
67 | if (idkp) { | 67 | if (idkp) { |
68 | kref_get(&idkp->kref); | 68 | if (ide_device_get(idkp->drive)) |
69 | if (ide_device_get(idkp->drive)) { | ||
70 | kref_put(&idkp->kref, ide_disk_release); | ||
71 | idkp = NULL; | 69 | idkp = NULL; |
72 | } | 70 | else |
71 | kref_get(&idkp->kref); | ||
73 | } | 72 | } |
74 | mutex_unlock(&idedisk_ref_mutex); | 73 | mutex_unlock(&idedisk_ref_mutex); |
75 | return idkp; | 74 | return idkp; |
@@ -77,9 +76,11 @@ static struct ide_disk_obj *ide_disk_get(struct gendisk *disk) | |||
77 | 76 | ||
78 | static void ide_disk_put(struct ide_disk_obj *idkp) | 77 | static void ide_disk_put(struct ide_disk_obj *idkp) |
79 | { | 78 | { |
79 | ide_drive_t *drive = idkp->drive; | ||
80 | |||
80 | mutex_lock(&idedisk_ref_mutex); | 81 | mutex_lock(&idedisk_ref_mutex); |
81 | ide_device_put(idkp->drive); | ||
82 | kref_put(&idkp->kref, ide_disk_release); | 82 | kref_put(&idkp->kref, ide_disk_release); |
83 | ide_device_put(drive); | ||
83 | mutex_unlock(&idedisk_ref_mutex); | 84 | mutex_unlock(&idedisk_ref_mutex); |
84 | } | 85 | } |
85 | 86 | ||