Re: IDE disk geometry + patch

Mark Lord (mlord@pobox.com)
Fri, 04 Dec 1998 05:15:17 +0000


The reason the IDE driver does NOT do what you suggest
is to ensure 100% compatibility with the BIOS view when
using programs (like LILO and fdisk) which interact with
the BIOS.

The code is very careful to correctly use the BIOS view
of the drive under such circumstances, and it is a little
too risky to try changing it at this stage of 2.1.xxx
(it could break many systems through some unforeseen interaction).

Maybe try again in 2.3.xx ?

-- 
mlord@pobox.com

Andries.Brouwer@cwi.nl wrote: > > People complain that the kernel reports > hda: IB<-DTTA-351680, 16124MB w/462kB Cache, CHS=1024/255/63, UDMA > for their large IDE disks. > But 1024*255*63*512=8422686720, so the reported C/H/S describes > only half of the disk. > > Conjectured sequence of events: the disk reports 16383,16,63; > these numbers would have been recognized by the kernel, > but unfortunately the user selected LBA, and the BIOS > turned this geometry into 1024,255,63 which the kernel > no longer recognizes. Now the fragment of ide.c:do_identify() > in 2.0.36 or ide-disk.c:idedisk_setup() in 2.1.130 > > /* Correct the number of cyls if the bios value is too small */ > if (drive->sect == drive->bios_sect && drive->head == drive->bios_head) { > if (drive->cyl > drive->bios_cyl) > drive->bios_cyl = drive->cyl; > } > > does not update drive->bios_cyl since drive->head != drive->bios_head. > So, I propose that the above fragment be changed into something like > > /* Set the cylinder count - the BIOS reported value may be too small */ > if (drive->bios_sect && drive->bios_head) > drive->bios_cyl = capacity / (drive->bios_sect * drive->bios_head); > > where `capacity' is current_capacity(drive) in the 2.0.36 source, > and idedisk_capacity(drive) in the 2.1.130 source. > > Andries

-- 
mlord@pobox.com

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/