From: Thorsten Wilmer Date: Tue, 24 Jun 2014 07:38:30 +0000 (+0200) Subject: libfdisk: (dos) calculation of total size based on CHS in check function X-Git-Tag: v2.25-rc2~42 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9bb8caff87c2ae1ea22068176d3375c1cc2cb76d;p=thirdparty%2Futil-linux.git libfdisk: (dos) calculation of total size based on CHS in check function Many people report a problem with the message if (cylinders <= 1024 && start != total) fprintf(stderr, _("Partition %d: previous sectors %d disagrees with " "total %d\n"), n, start, total); This message comes from the fact that the previous code caluclates the total number of sectors in the wrong way. The formula should be total = (real_c * heads + h) * sectors + real_s; As a Cylinder consists of some heads * sectors A Head consists of some sectors and finally sectors are the smallest unit Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c index e365e722d0..f3b162af17 100644 --- a/libfdisk/src/dos.c +++ b/libfdisk/src/dos.c @@ -1155,7 +1155,7 @@ static void check(struct fdisk_context *cxt, size_t n, real_s = sector(s) - 1; real_c = cylinder(s, c); - total = (real_c * cxt->geom.sectors + real_s) * cxt->geom.heads + h; + total = (real_c * cxt->geom.heads + h) * cxt->geom.sectors + real_s; if (!total) fdisk_warnx(cxt, _("Partition %zu: contains sector 0"), n);