]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Introduce new open_mddev which just does an open.
authorNeilBrown <neilb@suse.de>
Mon, 3 Nov 2008 23:35:31 +0000 (10:35 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 3 Nov 2008 23:35:31 +0000 (10:35 +1100)
Some cases we aren't interested in creating the mddev, just opening
it.  Make those more explicit.

Signed-off-by: NeilBrown <neilb@suse.de>
mdadm.c
mdadm.h
mdopen.c

diff --git a/mdadm.c b/mdadm.c
index fb52b141a1dbc3ab356ba2f78b255152d1f4d50f..b33f605bb9bd6798226d9c4b0dba1a62b779c963 100644 (file)
--- a/mdadm.c
+++ b/mdadm.c
@@ -943,8 +943,9 @@ int main(int argc, char *argv[])
                        exit(2);
                }
                if (mode == MANAGE || mode == GROW)
-                       autof=1; /* Don't create */
-               mdfd = create_mddev(devlist->devname, autof);
+                       mdfd = open_mddev(devlist->devname, 1);
+               else
+                       mdfd = create_mddev(devlist->devname, autof);
                if (mdfd < 0)
                        exit(1);
                if ((int)ident.super_minor == -2) {
@@ -1242,7 +1243,7 @@ int main(int argc, char *argv[])
                                                                        e->dev);
                                                                continue;
                                                        }
-                                                       mdfd = create_mddev(name, 1);
+                                                       mdfd = open_mddev(name, 1);
                                                        if (mdfd >= 0) {
                                                                if (Manage_runstop(name, mdfd, -1, quiet?1:last?0:-1))
                                                                        err = 1;
@@ -1279,7 +1280,7 @@ int main(int argc, char *argv[])
                                case Waitclean:
                                        rv |= WaitClean(dv->devname, verbose-quiet); continue;
                                }
-                               mdfd = create_mddev(dv->devname, 1);
+                               mdfd = open_mddev(dv->devname, 1);
                                if (mdfd>=0) {
                                        switch(dv->disposition) {
                                        case 'R':
diff --git a/mdadm.h b/mdadm.h
index 8527bbb15d6967d3f9d30f0cc60c3d6ea7ab648f..7b7e233b8cbb8d0cf26930b807c6828572e33529 100644 (file)
--- a/mdadm.h
+++ b/mdadm.h
@@ -802,6 +802,7 @@ extern char *get_md_name(int dev);
 extern char DefaultConfFile[];
 
 extern int create_mddev(char *dev, int autof);
+extern int open_mddev(char *dev, int report_errors);
 extern int create_mddev_devnum(char *devname, int devnum, char *name,
                             char *chosen_name, int parts);
 extern int open_container(int fd);
index 515683599078b4d25927e826ab96135b8f66f8bd..285d811b14f6cad9d2df5bc20b37abc11efbb525 100644 (file)
--- a/mdopen.c
+++ b/mdopen.c
@@ -254,15 +254,30 @@ int create_mddev(char *dev, int autof)
                                make_parts(dev,parts, ci->symlinks);
                }
        }
-       mdfd = open(dev, O_RDWR);
-       if (mdfd < 0)
-               fprintf(stderr, Name ": error opening %s: %s\n",
-                       dev, strerror(errno));
-       else if (md_get_version(mdfd) <= 0) {
-               fprintf(stderr, Name ": %s does not appear to be an md device\n",
-                       dev);
+       mdfd = open_mddev(dev, 1);
+       return mdfd;
+}
+
+/* Open this and check that it is an md device.
+ * On success, return filedescriptor.
+ * On failure, return -1 if it doesn't exist,
+ * or -2 if it exists but is not an md device.
+ */
+int open_mddev(char *dev, int report_errors)
+{
+       int mdfd = open(dev, O_RDWR);
+       if (mdfd < 0) {
+               if (report_errors)
+                       fprintf(stderr, Name ": error opening %s: %s\n",
+                               dev, strerror(errno));
+               return -1;
+       }
+       if (md_get_version(mdfd) <= 0) {
                close(mdfd);
-               mdfd = -1;
+               if (report_errors)
+                       fprintf(stderr, Name ": %s does not appear to be "
+                               "an md device\n", dev);
+               return -2;
        }
        return mdfd;
 }