ide: init_idedisk_capacity() cleanup() - no need to zero drive->capacity48 and drive->select.b.lba - don't call idedisk_read_native_max_address_ext() twice if drive uses LBA-48 and CONFIG_IDEDISK_STROKE is defined - remove uneccessary setup of drive->capacity48/cyl/select.b.lba if drive uses LBA-48, maximum virtual LBA address needs to be set and CONFIG_IDEDISK_STROKE is defined - set drive->cyl only once if drive uses LBA-48 - don't call idedisk_read_native_max_address() if drive uses LBA-48 and don't call it twice if CONFIG_IDEDISK_STROKE is defined - don't check for Host Protected Area if drive uses CHS addressing (such combination is not supported by a driver) - remove duplicated code (at the end of the function) that is never executed drivers/ide/ide-disk.c | 32 +++++++++----------------------- 1 files changed, 9 insertions(+), 23 deletions(-) diff -puN drivers/ide/ide-disk.c~ide-disk-capacity-init-cleanup drivers/ide/ide-disk.c --- linux-2.6.0-test2-bk5/drivers/ide/ide-disk.c~ide-disk-capacity-init-cleanup 2003-08-06 02:48:33.000000000 +0200 +++ linux-2.6.0-test2-bk5-root/drivers/ide/ide-disk.c 2003-08-06 16:23:27.000000000 +0200 @@ -1095,13 +1095,10 @@ static inline int idedisk_supports_host_ static void init_idedisk_capacity (ide_drive_t *drive) { struct hd_driveid *id = drive->id; - unsigned long capacity = drive->cyl * drive->head * drive->sect; - unsigned long set_max = idedisk_read_native_max_address(drive); - unsigned long long capacity_2 = capacity; - unsigned long long set_max_ext; + unsigned long capacity, set_max; + unsigned long long capacity_2, set_max_ext; - drive->capacity48 = 0; - drive->select.b.lba = 0; + capacity_2 = capacity = drive->cyl * drive->head * drive->sect; (void) idedisk_supports_host_protected_area(drive); @@ -1109,19 +1106,13 @@ static void init_idedisk_capacity (ide_d capacity_2 = id->lba_capacity_2; drive->head = drive->bios_head = 255; drive->sect = drive->bios_sect = 63; - drive->cyl = (unsigned int) capacity_2 / (drive->head * drive->sect); drive->select.b.lba = 1; set_max_ext = idedisk_read_native_max_address_ext(drive); if (set_max_ext > capacity_2 && capacity_2 > IDE_STROKE_LIMIT) { #ifdef CONFIG_IDEDISK_STROKE - set_max_ext = idedisk_read_native_max_address_ext(drive); set_max_ext = idedisk_set_max_address_ext(drive, set_max_ext); - if (set_max_ext) { - drive->capacity48 = capacity_2 = set_max_ext; - drive->cyl = (unsigned int) set_max_ext / (drive->head * drive->sect); - drive->select.b.lba = 1; - drive->id->lba_capacity_2 = capacity_2; - } + if (set_max_ext) + id->lba_capacity_2 = capacity_2 = set_max_ext; #else /* !CONFIG_IDEDISK_STROKE */ printk(KERN_INFO "%s: setmax_ext LBA %llu, native %llu\n", drive->name, set_max_ext, capacity_2); @@ -1137,11 +1128,14 @@ static void init_idedisk_capacity (ide_d capacity = id->lba_capacity; drive->cyl = capacity / (drive->head * drive->sect); drive->select.b.lba = 1; + } else { + drive->capacity = capacity; + return; } + set_max = idedisk_read_native_max_address(drive); if (set_max > capacity && capacity > IDE_STROKE_LIMIT) { #ifdef CONFIG_IDEDISK_STROKE - set_max = idedisk_read_native_max_address(drive); set_max = idedisk_set_max_address(drive, set_max); if (set_max) { drive->capacity = capacity = set_max; @@ -1154,15 +1148,7 @@ static void init_idedisk_capacity (ide_d drive->name, set_max, capacity); #endif /* CONFIG_IDEDISK_STROKE */ } - drive->capacity = capacity; - - if ((id->command_set_2 & 0x0400) && (id->cfs_enable_2 & 0x0400)) { - drive->capacity48 = id->lba_capacity_2; - drive->head = 255; - drive->sect = 63; - drive->cyl = (unsigned long)(drive->capacity48) / (drive->head * drive->sect); - } } static unsigned long idedisk_capacity (ide_drive_t *drive) _