svn commit: r227270 - head/sbin/bsdlabel
Andrey V. Elsukov
ae at FreeBSD.org
Sun Nov 6 20:32:55 UTC 2011
Author: ae
Date: Sun Nov 6 20:32:55 2011
New Revision: 227270
URL: http://svn.freebsd.org/changeset/base/227270
Log:
Add recommendation to use gpart(8) when user tries write disklabel
or bootcode to already opened provider.
MFC after: 1 week
Modified:
head/sbin/bsdlabel/bsdlabel.c
Modified: head/sbin/bsdlabel/bsdlabel.c
==============================================================================
--- head/sbin/bsdlabel/bsdlabel.c Sun Nov 6 20:30:21 2011 (r227269)
+++ head/sbin/bsdlabel/bsdlabel.c Sun Nov 6 20:32:55 2011 (r227270)
@@ -80,7 +80,7 @@ __FBSDID("$FreeBSD$");
#include "pathnames.h"
static void makelabel(const char *, struct disklabel *);
-static int geom_bsd_available(void);
+static int geom_class_available(const char *);
static int writelabel(void);
static int readlabel(int flag);
static void display(FILE *, const struct disklabel *);
@@ -355,7 +355,7 @@ readboot(void)
}
static int
-geom_bsd_available(void)
+geom_class_available(const char *name)
{
struct gclass *class;
struct gmesh mesh;
@@ -366,7 +366,7 @@ geom_bsd_available(void)
errc(1, error, "Cannot get GEOM tree");
LIST_FOREACH(class, &mesh.lg_class, lg_class) {
- if (strcmp(class->lg_name, "BSD") == 0) {
+ if (strcmp(class->lg_name, name) == 0) {
geom_deletetree(&mesh);
return (1);
}
@@ -411,8 +411,19 @@ writelabel(void)
} else
serrno = errno;
+ if (geom_class_available("PART") != 0) {
+ /* Since we weren't able open provider for
+ * writing, then recommend user to use gpart(8).
+ */
+ warnc(serrno,
+ "cannot open provider %s for writing label",
+ specname);
+ warnx("Try to use gpart(8).");
+ return (1);
+ }
+
/* Give up if GEOM_BSD is not available. */
- if (geom_bsd_available() == 0) {
+ if (geom_class_available("BSD") == 0) {
warnc(serrno, "%s", specname);
return (1);
}
More information about the svn-src-all
mailing list