summaryrefslogtreecommitdiffstats
path: root/sbin/geom/class
diff options
context:
space:
mode:
authorae <ae@FreeBSD.org>2016-04-11 13:44:31 +0000
committerae <ae@FreeBSD.org>2016-04-11 13:44:31 +0000
commit26836fccd261358467b3d92e77ff4695af286de9 (patch)
treefb6250cda883120da300e4d5d683b9ee405c9300 /sbin/geom/class
parent175f9d7444496870348fb2dc23d1b9fa87c8088c (diff)
downloadFreeBSD-src-26836fccd261358467b3d92e77ff4695af286de9.zip
FreeBSD-src-26836fccd261358467b3d92e77ff4695af286de9.tar.gz
Fix the problem, when gpart(8) can't write both bootcode and partcode
in one command due to wrong file size limit. Do not use bootcode size to calculate partsize limit. Also add report message about successful partcode writing. Reported by: Trond Endrestøl MFC after: 2 weeks
Diffstat (limited to 'sbin/geom/class')
-rw-r--r--sbin/geom/class/part/geom_part.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/sbin/geom/class/part/geom_part.c b/sbin/geom/class/part/geom_part.c
index 44309f9..4f57f00 100644
--- a/sbin/geom/class/part/geom_part.c
+++ b/sbin/geom/class/part/geom_part.c
@@ -1126,6 +1126,7 @@ gpart_write_partcode(struct ggeom *gp, int idx, void *code, ssize_t size)
err(EXIT_FAILURE, "%s", dsf);
free(buf);
close(fd);
+ printf("partcode written to %s\n", pp->lg_name);
} else
errx(EXIT_FAILURE, "invalid partition index");
}
@@ -1172,6 +1173,9 @@ gpart_write_partcode_vtoc8(struct ggeom *gp, int idx, void *code)
}
if (installed == 0)
errx(EXIT_FAILURE, "%s: no partitions", gp->lg_name);
+ else
+ printf("partcode written to %s\n",
+ idx != 0 ? pp->lg_name: gp->lg_name);
}
static void
@@ -1193,10 +1197,8 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl)
bootcode);
if (error)
errc(EXIT_FAILURE, error, "internal error");
- } else {
+ } else
bootcode = NULL;
- bootsize = 0;
- }
s = gctl_get_ascii(req, "class");
if (s == NULL)
@@ -1220,21 +1222,23 @@ gpart_bootcode(struct gctl_req *req, unsigned int fl)
s = find_geomcfg(gp, "scheme");
if (s == NULL)
errx(EXIT_FAILURE, "Scheme not found for geom %s", gp->lg_name);
- vtoc8 = 0;
if (strcmp(s, "VTOC8") == 0)
vtoc8 = 1;
+ else
+ vtoc8 = 0;
if (gctl_has_param(req, GPART_PARAM_PARTCODE)) {
s = gctl_get_ascii(req, GPART_PARAM_PARTCODE);
- partsize = vtoc8 != 0 ? VTOC_BOOTSIZE : bootsize * 1024;
+ if (vtoc8 != 0)
+ partsize = VTOC_BOOTSIZE;
+ else
+ partsize = 1024 * 1024; /* Arbitrary limit. */
partcode = gpart_bootfile_read(s, &partsize);
error = gctl_delete_param(req, GPART_PARAM_PARTCODE);
if (error)
errc(EXIT_FAILURE, error, "internal error");
- } else {
+ } else
partcode = NULL;
- partsize = 0;
- }
if (gctl_has_param(req, GPART_PARAM_INDEX)) {
if (partcode == NULL)
OpenPOWER on IntegriCloud