From: Karel Zak Date: Tue, 3 Feb 2015 12:20:45 +0000 (+0100) Subject: libfdisk: don't align very small partitions X-Git-Tag: v2.26-rc2~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=68fe4b2822018cb952e6b0c7dbca75a228cc7117;p=thirdparty%2Futil-linux.git libfdisk: don't align very small partitions Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c index 73b985b884..24b824c2ee 100644 --- a/libfdisk/src/dos.c +++ b/libfdisk/src/dos.c @@ -1197,6 +1197,11 @@ static int add_partition(struct fdisk_context *cxt, size_t n, if (stop > limit) stop = limit; + if (isrel && stop - start < cxt->grain) + /* Don't try to be smart on very small partitions and don't + * align so small sizes, just follow the resurst */ + isrel = 0; + if (stop < limit) { if (isrel && alignment_required(cxt)) { /* the last sector has not been exactly requested (but diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c index f1e4a65e7f..4a3f7d5943 100644 --- a/libfdisk/src/gpt.c +++ b/libfdisk/src/gpt.c @@ -2071,9 +2071,12 @@ static int gpt_add_partition( user_l = user_f + pa->size - 1; DBG(LABEL, ul_debug("size defined: %ju, end: %ju (last possible: %ju)", pa->size, user_l, dflt_l)); - if (user_l != dflt_l && !pa->size_explicit) - user_l = fdisk_align_lba_in_range(cxt, user_l, user_f, dflt_l) - 1; - + if (user_l != dflt_l && !pa->size_explicit + && user_l - user_f > cxt->grain) { + user_l = fdisk_align_lba_in_range(cxt, user_l, user_f, dflt_l); + if (user_l > user_f) + user_l -= 1; + } } else { for (;;) { if (!ask)