bin/58390: bsdlabel(8) fails to display an error message if the label could not be written

jh at FreeBSD.org jh at FreeBSD.org
Thu Jul 1 16:23:32 UTC 2010


Synopsis: bsdlabel(8) fails to display an error message if the label could not be written

State-Changed-From-To: open->feedback
State-Changed-By: jh
State-Changed-When: Thu Jul 1 15:55:12 UTC 2010
State-Changed-Why: 
Is this still a problem for you?

On 8.0:

/dev/md1 on /mnt (ufs, local)
# bsdlabel -w /dev/md1
bsdlabel: Class not found

But this is because GEOM_BSD has been changed to GEOM_PART_BSD.
The error message is not very informative.

On 7.3 (uses GEOM_BSD):

# bsdlabel -w /dev/md1
bsdlabel: Geom not found: "md0"

Not very informative either.

This change makes the error message more understandable for me:

%%%
Index: sbin/bsdlabel/bsdlabel.c
===================================================================
--- sbin/bsdlabel/bsdlabel.c	(revision 209622)
+++ sbin/bsdlabel/bsdlabel.c	(working copy)
@@ -382,7 +382,7 @@ static int
 writelabel(void)
 {
 	uint64_t *p, sum;
-	int i, fd;
+	int i, fd, serrno;
 	struct gctl_req *grq;
 	char const *errstr;
 	struct disklabel *lp = &lab;
@@ -413,6 +413,7 @@ writelabel(void)
 
 	fd = open(specname, O_RDWR);
 	if (fd < 0) {
+		serrno = errno;
 		if (is_file) {
 			warn("cannot open file %s for writing label", specname);
 			return(1);
@@ -426,7 +427,7 @@ writelabel(void)
 			bootarea + labeloffset + labelsoffset * secsize);
 		errstr = gctl_issue(grq);
 		if (errstr != NULL) {
-			warnx("%s", errstr);
+			warnc(serrno, "%s", specname);
 			gctl_free(grq);
 			return(1);
 		}
%%%

With the patch applied:

# bsdlabel -w /dev/md1 
bsdlabel: /dev/md1: Operation not permitted



Responsible-Changed-From-To: freebsd-bugs->jh
Responsible-Changed-By: jh
Responsible-Changed-When: Thu Jul 1 15:55:12 UTC 2010
Responsible-Changed-Why: 
Track.

http://www.freebsd.org/cgi/query-pr.cgi?pr=58390


More information about the freebsd-bugs mailing list