> I have a question about the start field in the hd_geometry structure. We used
>
> geo->start = device->major_info->gendisk.part[MINOR(kdev)].start_sect
> >> device->sizes.s2b_shift;
>
> in the old dasd driver but now we use
>
> geo.start = get_start_sect(kdev);
>
> to set the start field. One variant is wrong because the start sector differ if
> the block size is not 512 byte. The first variant calculates the start sector
> based on physical blocks (e.g. with 4096 bytes instead of 512 bytes). The
> second variant calulcates a "soft" start sector based on logical 512 byte
> blocks. Whats correct, first or second variant ?? I tend to favor the first
> variant because struct hd_geometry describes the physical geometry
> (number of heads, sectors, cylinders and start sector) but I am not 100%
> sure about it.
About a partition one wants to know start and length.
About a full disk one wants to know size, and perhaps a (fake) geometry.
The vital partition data cannot depend on obscure hardware info.
So, the units used must be well-known. Earlier, everything was in
512-byte sectors, but there are a few places where that is inconvenient
or unnatural, and now that one has more than 2^32 sectors and 64 bits
are needed anyway, things are measured in bytes.
That the start field comes with the HDIO_GETGEO ioctl and the size with
the BLKGETSIZE ioctl is due to history. Both are given in 512-byte sectors.
BLKGETSIZE64 gives bytes.
Andries
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/