svn commit: r297820 - head/sbin/geom/class/part
Andrey V. Elsukov
ae at FreeBSD.org
Mon Apr 11 13:44:33 UTC 2016
Author: ae
Date: Mon Apr 11 13:44:31 2016
New Revision: 297820
URL: https://svnweb.freebsd.org/changeset/base/297820
Log:
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
Modified:
head/sbin/geom/class/part/geom_part.c
Modified: head/sbin/geom/class/part/geom_part.c
==============================================================================
--- head/sbin/geom/class/part/geom_part.c Mon Apr 11 13:17:11 2016 (r297819)
+++ head/sbin/geom/class/part/geom_part.c Mon Apr 11 13:44:31 2016 (r297820)
@@ -1126,6 +1126,7 @@ gpart_write_partcode(struct ggeom *gp, i
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
}
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, uns
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, uns
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)
More information about the svn-src-all
mailing list