diff options
Diffstat (limited to 'drivers/ide/ide-floppy.c')
-rw-r--r-- | drivers/ide/ide-floppy.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c index ca11a26746f1..e9034c0125f3 100644 --- a/drivers/ide/ide-floppy.c +++ b/drivers/ide/ide-floppy.c | |||
@@ -167,11 +167,10 @@ static struct ide_floppy_obj *ide_floppy_get(struct gendisk *disk) | |||
167 | mutex_lock(&idefloppy_ref_mutex); | 167 | mutex_lock(&idefloppy_ref_mutex); |
168 | floppy = ide_floppy_g(disk); | 168 | floppy = ide_floppy_g(disk); |
169 | if (floppy) { | 169 | if (floppy) { |
170 | kref_get(&floppy->kref); | 170 | if (ide_device_get(floppy->drive)) |
171 | if (ide_device_get(floppy->drive)) { | ||
172 | kref_put(&floppy->kref, idefloppy_cleanup_obj); | ||
173 | floppy = NULL; | 171 | floppy = NULL; |
174 | } | 172 | else |
173 | kref_get(&floppy->kref); | ||
175 | } | 174 | } |
176 | mutex_unlock(&idefloppy_ref_mutex); | 175 | mutex_unlock(&idefloppy_ref_mutex); |
177 | return floppy; | 176 | return floppy; |
@@ -179,9 +178,11 @@ static struct ide_floppy_obj *ide_floppy_get(struct gendisk *disk) | |||
179 | 178 | ||
180 | static void ide_floppy_put(struct ide_floppy_obj *floppy) | 179 | static void ide_floppy_put(struct ide_floppy_obj *floppy) |
181 | { | 180 | { |
181 | ide_drive_t *drive = floppy->drive; | ||
182 | |||
182 | mutex_lock(&idefloppy_ref_mutex); | 183 | mutex_lock(&idefloppy_ref_mutex); |
183 | ide_device_put(floppy->drive); | ||
184 | kref_put(&floppy->kref, idefloppy_cleanup_obj); | 184 | kref_put(&floppy->kref, idefloppy_cleanup_obj); |
185 | ide_device_put(drive); | ||
185 | mutex_unlock(&idefloppy_ref_mutex); | 186 | mutex_unlock(&idefloppy_ref_mutex); |
186 | } | 187 | } |
187 | 188 | ||