From 9bb8caff87c2ae1ea22068176d3375c1cc2cb76d Mon Sep 17 00:00:00 2001 From: Thorsten Wilmer Date: Tue, 24 Jun 2014 09:38:30 +0200 Subject: [PATCH] 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 --- libfdisk/src/dos.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); -- 2.47.3