From: Yu Watanabe Date: Sun, 4 Sep 2022 09:26:04 +0000 (+0900) Subject: repart: introduce partition_{min,max}_padding() X-Git-Tag: v252-rc1~222^2~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a801bb015702d805a8a0e7ca861b2850ae2d7d5f;p=thirdparty%2Fsystemd.git repart: introduce partition_{min,max}_padding() No actual code changes, just refactoring. --- diff --git a/src/partition/repart.c b/src/partition/repart.c index 1b61700dd0c..831e257634a 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -527,6 +527,16 @@ static uint64_t partition_max_size(const Context *context, const Partition *p) { return MAX(partition_min_size(context, p), sm); } +static uint64_t partition_min_padding(const Partition *p) { + assert(p); + return p->padding_min != UINT64_MAX ? p->padding_min : 0; +} + +static uint64_t partition_max_padding(const Partition *p) { + assert(p); + return p->padding_max; +} + static uint64_t partition_min_size_with_padding(Context *context, const Partition *p) { uint64_t sz; @@ -537,10 +547,7 @@ static uint64_t partition_min_size_with_padding(Context *context, const Partitio assert(context); assert(p); - sz = partition_min_size(context, p); - - if (p->padding_min != UINT64_MAX) - sz += p->padding_min; + sz = partition_min_size(context, p) + partition_min_padding(p); if (PARTITION_EXISTS(p)) { /* If the partition wasn't aligned, add extra space so that any we might add will be aligned */ @@ -796,24 +803,23 @@ static int context_grow_partitions_phase( if (p->new_padding == UINT64_MAX) { bool charge = false, try_again = false; - uint64_t share; + uint64_t share, rsz, xsz; r = scale_by_weight(*span, p->padding_weight, *weight_sum, &share); if (r < 0) return r; - if (phase == PHASE_OVERCHARGE && p->padding_min != UINT64_MAX && p->padding_min > share) { - p->new_padding = p->padding_min; + rsz = partition_min_padding(p); + xsz = partition_max_padding(p); + + if (phase == PHASE_OVERCHARGE && rsz > share) { + p->new_padding = rsz; charge = try_again = true; - } else if (phase == PHASE_UNDERCHARGE && p->padding_max != UINT64_MAX && p->padding_max < share) { - p->new_padding = p->padding_max; + } else if (phase == PHASE_UNDERCHARGE && xsz < share) { + p->new_padding = xsz; charge = try_again = true; } else if (phase == PHASE_DISTRIBUTE) { - - p->new_padding = round_down_size(share, context->grain_size); - if (p->padding_min != UINT64_MAX && p->new_padding < p->padding_min) - p->new_padding = p->padding_min; - + p->new_padding = MAX(round_down_size(share, context->grain_size), rsz); charge = true; }