diff options
Diffstat (limited to 'drivers/ide/ide-disk.c')
| -rw-r--r-- | drivers/ide/ide-disk.c | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index 28d85b410f7c..07ef88bd109b 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 | ||
| @@ -444,20 +445,6 @@ static void idedisk_check_hpa(ide_drive_t *drive) | |||
| 444 | } | 445 | } |
| 445 | } | 446 | } |
| 446 | 447 | ||
| 447 | /* | ||
| 448 | * Compute drive->capacity, the full capacity of the drive | ||
| 449 | * Called with drive->id != NULL. | ||
| 450 | * | ||
| 451 | * To compute capacity, this uses either of | ||
| 452 | * | ||
| 453 | * 1. CHS value set by user (whatever user sets will be trusted) | ||
| 454 | * 2. LBA value from target drive (require new ATA feature) | ||
| 455 | * 3. LBA value from system BIOS (new one is OK, old one may break) | ||
| 456 | * 4. CHS value from system BIOS (traditional style) | ||
| 457 | * | ||
| 458 | * in above order (i.e., if value of higher priority is available, | ||
| 459 | * reset will be ignored). | ||
| 460 | */ | ||
| 461 | static void init_idedisk_capacity(ide_drive_t *drive) | 448 | static void init_idedisk_capacity(ide_drive_t *drive) |
| 462 | { | 449 | { |
| 463 | struct hd_driveid *id = drive->id; | 450 | struct hd_driveid *id = drive->id; |
