diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-05 11:39:33 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-05 11:39:33 -0700 |
commit | 35ad1c8803921b28541ad28bfb18dc3b6295ba98 (patch) | |
tree | 998468e8bd42fab02d09bae8fc74bdf546608580 /drivers/ide/ide-floppy.c | |
parent | 580da34847488b404218d1d7f53b156f245f5555 (diff) | |
parent | f454cbe8cd38b6d447e74ddaf012017fea42717e (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6:
ide: ->cable_detect method cannot be marked __devinit
ide: ->quirkproc method cannot be marked __devinit
cs5520: add enablebits checking
cdrom: don't check CDC_PLAY_AUDIO in cdrom_count_tracks()
ide-cd: fix endianity for the error message in cdrom_read_capacity
ide: remove CONFIG_IDE_MAX_HWIFS
remove unneeded #include <linux/ide.h>'s
ide: fix regression caused by ide_device_{get,put}() addition (take 2)
remove unnecessary <linux/hdreg.h> includes
ide: sanitize struct ide_port_ops documentation (take 2)
ide: fix ide_fix_driveid()
ide: fix pre-EIDE SWDMA support on big-endian
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 ca11a26746f..e9034c0125f 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) 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); } |