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);
                }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to