Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Apr 2016 11:55:28 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r298628 - stable/10/sbin/geom/class/part
Message-ID:  <201604261155.u3QBtSpt077712@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ae
Date: Tue Apr 26 11:55:28 2016
New Revision: 298628
URL: https://svnweb.freebsd.org/changeset/base/298628

Log:
  MFC r297820:
    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.

Modified:
  stable/10/sbin/geom/class/part/geom_part.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sbin/geom/class/part/geom_part.c
==============================================================================
--- stable/10/sbin/geom/class/part/geom_part.c	Tue Apr 26 11:53:37 2016	(r298627)
+++ stable/10/sbin/geom/class/part/geom_part.c	Tue Apr 26 11:55:28 2016	(r298628)
@@ -1115,6 +1115,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");
 }
@@ -1161,6 +1162,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
@@ -1182,10 +1186,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)
@@ -1209,21 +1211,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)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201604261155.u3QBtSpt077712>