Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/sysinst PR 55991: when extending the marked partiti...
details: https://anonhg.NetBSD.org/src/rev/ee9556d1971f
branches: trunk
changeset: 959423:ee9556d1971f
user: martin <martin%NetBSD.org@localhost>
date: Sat Feb 13 15:31:35 2021 +0000
description:
PR 55991: when extending the marked partition (typically: the NetBSD root
partition) round the new size up to current alignment.
This may lead to a slightly smaller than initialy planned last partition
(depending on order added) if the disk size is odd or the partitioning
scheme needs some internal space (like GPT) - but it avoids gaps elsewhere
due to alignement.
Ideally we would pin all other partitions in a first pass and then let
the partitioning backend pick the full available size for the extended
partition, but this should be good enough.
diffstat:
usr.sbin/sysinst/bsddisklabel.c | 15 ++++++++-------
1 files changed, 8 insertions(+), 7 deletions(-)
diffs (45 lines):
diff -r 94e74cc2460d -r ee9556d1971f usr.sbin/sysinst/bsddisklabel.c
--- a/usr.sbin/sysinst/bsddisklabel.c Sat Feb 13 14:30:37 2021 +0000
+++ b/usr.sbin/sysinst/bsddisklabel.c Sat Feb 13 15:31:35 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: bsddisklabel.c,v 1.57 2021/01/31 22:45:46 rillig Exp $ */
+/* $NetBSD: bsddisklabel.c,v 1.58 2021/02/13 15:31:35 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1387,6 +1387,8 @@
* Pass one: calculate space available for expanding
* the marked partition.
*/
+ if (parts->free_space != parts->disk_size)
+ planned_space = align; /* align first part */
for (i = 0; i < wanted->num; i++) {
if ((wanted->infos[i].flags & PUIFLAG_EXTEND) &&
exp_ndx == ~0U)
@@ -1403,8 +1405,9 @@
if (!(wanted->infos[i].flags & PUIFLG_IS_OUTER))
nsp -= infos[i].size;
}
- if (nsp > 0)
- planned_space += roundup(nsp, align);
+ if (nsp <= 0)
+ continue;
+ planned_space += roundup(nsp, align);
}
/*
@@ -1412,12 +1415,10 @@
* but check size limits.
*/
if (exp_ndx < wanted->num) {
- daddr_t free_space =
- parts->free_space - roundup(wanted->reserved_space, align);
- free_space -= planned_space;
+ daddr_t free_space = parts->free_space - planned_space;
daddr_t new_size = wanted->infos[exp_ndx].size;
if (free_space > 0)
- new_size += free_space;
+ new_size += roundup(free_space,align);
if (wanted->infos[exp_ndx].limit > 0 &&
(new_size + wanted->infos[exp_ndx].cur_start)
Home |
Main Index |
Thread Index |
Old Index