diff options
author | Karel Zak <kzak@redhat.com> | 2010-03-19 15:56:27 +0100 |
---|---|---|
committer | Karel Zak <kzak@redhat.com> | 2010-03-19 15:56:27 +0100 |
commit | 7f152745c33567f49807019fd4f5f72eadfd4fd4 (patch) | |
tree | 3ce1170267b974feae48c4f64c1ad150fae920a0 /fdisk | |
parent | e981b2887fa3d6718467e4e26d4eff36dab73a39 (diff) | |
download | util-linux-old-7f152745c33567f49807019fd4f5f72eadfd4fd4.tar.gz |
fdisk: fix -b <sectorsize>
The old fdisk (<2.17) does not differentiate between logical and
physical sector size, it uses the <sectorsize> for everything.
Now, we have logical and physical sectors size, but the -b option
changes the logical size only. The second bug is that "fdisk -b <sz>"
does not read topology information (it means that all I/O limits and
physical sector size are 512 (default).
The backwardly compatible bug fix is to override both sizes, logical
and physical if "-b" is used.
In future we can add a special option for physical size only.
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'fdisk')
-rw-r--r-- | fdisk/fdisk.8 | 4 | ||||
-rw-r--r-- | fdisk/fdisk.c | 18 |
2 files changed, 15 insertions, 7 deletions
diff --git a/fdisk/fdisk.8 b/fdisk/fdisk.8 index 367837d9..30dc9678 100644 --- a/fdisk/fdisk.8 +++ b/fdisk/fdisk.8 @@ -182,7 +182,9 @@ program and Linux partitions with the Linux fdisk or Linux cfdisk program. .BI "\-b " sectorsize Specify the sector size of the disk. Valid values are 512, 1024, 2048 or 4096. (Recent kernels know the sector size. Use this only on old kernels or -to override the kernel's ideas.) +to override the kernel's ideas.) Since util-linux-ng 2.17 fdisk differentiates +between logical and physical sector size. This option changes both sector sizes to +.IB sectorsize . .TP .BI \-h Print help and then exit. diff --git a/fdisk/fdisk.c b/fdisk/fdisk.c index 2a6d419f..f5c67904 100644 --- a/fdisk/fdisk.c +++ b/fdisk/fdisk.c @@ -976,8 +976,6 @@ get_topology(int fd) { #ifdef HAVE_LIBBLKID_INTERNAL blkid_probe pr; - if (user_set_sector_size) - return; pr = blkid_new_probe(); if (pr && blkid_probe_set_device(pr, fd, 0, 0) == 0) { blkid_topology tp = blkid_probe_get_topology(pr); @@ -1006,12 +1004,20 @@ get_topology(int fd) { #endif if (user_set_sector_size) - ; - else if (blkdev_get_sector_size(fd, &arg) == 0) + /* fdisk since 2.17 differentiate between logical and physical + * sectors size. For backward compatibility the + * fdisk -b <sectorsize> + * changes both, logical and physical sector size. + */ + phy_sector_size = sector_size; + + else if (blkdev_get_sector_size(fd, &arg) == 0) { sector_size = arg; - if (!phy_sector_size) - phy_sector_size = sector_size; + if (!phy_sector_size) + phy_sector_size = sector_size; + } + if (!min_io_size) min_io_size = phy_sector_size; if (!io_size) |