fdisk: use 1MiB offset and grain always when possible

It would be nice to minimize dependence between the disk layout and
disk topology. We have to follow disk topology for alignment_offset
and huge (> 1MiB) I/O sizes only. For all others disks we can use 1MiB
grain and 1MiB offset.

Reported-by: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2010-02-15 15:55:22 +01:00
parent 78498b7b90
commit 9b15ea8048
1 changed files with 14 additions and 5 deletions

View File

@ -1080,17 +1080,26 @@ update_sector_offset(void)
* device where the offset is quarter of of whole size
* of the device).
*/
unsigned long long x;
unsigned long long x = 0;
if (has_topology)
x = alignment_offset ? alignment_offset : io_size;
else
x = grain = 2048 * 512;
if (has_topology) {
if (alignment_offset)
x = alignment_offset;
else if (io_size > 2048 * 512)
x = io_size;
}
/* default to 1MiB */
if (!x)
x = 2048 * 512;
sector_offset = x / sector_size;
if (total_number_of_sectors <= sector_offset * 4)
sector_offset = phy_sector_size / sector_size;
/* use 1MiB grain always when possible */
if (grain < 2048 * 512)
grain = 2048 * 512;
}
}