Only update disk if size was changed and not under dryrun
This commit is contained in:
parent
aa963100ba
commit
139f35d9d4
1 changed files with 22 additions and 5 deletions
|
@ -48,19 +48,21 @@ dkcksum(struct disklabel *lp)
|
|||
int
|
||||
growdisk(struct system_config *sc)
|
||||
{
|
||||
char c, last_part = 0, *out, *path = NULL;
|
||||
char c, last_part = 0, *out = NULL, *path = NULL;
|
||||
int ret = -1, i, errfd, outfd;
|
||||
uint64_t bend, psize;
|
||||
struct partition *pp, *p = NULL;
|
||||
struct disklabel lp;
|
||||
int fd;
|
||||
uint16_t cksum;
|
||||
int fd;
|
||||
|
||||
/*
|
||||
* Grow the OpenBSD MBR partition
|
||||
*/
|
||||
|
||||
/* XXX this is a bit ugly but easier to do */
|
||||
if (shellout("e 3\n\n\n\n*\nw\nq\n", &out,
|
||||
if (!sc->sc_dryrun &&
|
||||
shellout("e 3\n\n\n\n*\nw\nq\n", &out,
|
||||
"fdisk", "-e", sc->sc_rootdisk, NULL) != 0) {
|
||||
log_warnx("failed to grow OpenBSD partition");
|
||||
return (-1);
|
||||
|
@ -110,11 +112,26 @@ growdisk(struct system_config *sc)
|
|||
goto done;
|
||||
}
|
||||
|
||||
bend = DL_GETDSIZE(&lp) - DL_GETBSTART(&lp);
|
||||
psize = DL_GETBEND(&lp) - DL_GETPOFFSET(p);
|
||||
|
||||
if (sc->sc_dryrun ||
|
||||
(bend == DL_GETBEND(&lp) && psize == DL_GETPSIZE(p))) {
|
||||
log_debug("%s: %s%c uses maximum size %llu",
|
||||
__func__, sc->sc_rootdisk, last_part, psize);
|
||||
|
||||
ret = 0;
|
||||
goto done;
|
||||
}
|
||||
|
||||
log_debug("%s: growing %s%c from %llu to %llu",
|
||||
__func__, sc->sc_rootdisk, last_part, DL_GETPSIZE(p), psize);
|
||||
|
||||
/* Update OpenBSD boundaries */
|
||||
DL_SETBEND(&lp, DL_GETDSIZE(&lp) - DL_GETBSTART(&lp));
|
||||
DL_SETBEND(&lp, bend);
|
||||
|
||||
/* Update the size of the last partition */
|
||||
DL_SETPSIZE(p, DL_GETBEND(&lp) - DL_GETPOFFSET(p));
|
||||
DL_SETPSIZE(p, psize);
|
||||
|
||||
lp.d_checksum = dkcksum(&lp);
|
||||
|
||||
|
|
Loading…
Reference in a new issue