]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdadm.c
Introduce new open_mddev which just does an open.
[thirdparty/mdadm.git] / mdadm.c
diff --git a/mdadm.c b/mdadm.c
index 8b4b5dffbacceb81dbb05fb7e438ead3052abecc..b33f605bb9bd6798226d9c4b0dba1a62b779c963 100644 (file)
--- a/mdadm.c
+++ b/mdadm.c
@@ -124,6 +124,8 @@ int main(int argc, char *argv[])
        ident.bitmap_fd = -1;
        ident.bitmap_file = NULL;
        ident.name[0] = 0;
+       ident.container = NULL;
+       ident.member = NULL;
 
        while ((option_index = -1) ,
               (opt=getopt_long(argc, argv,
@@ -214,6 +216,7 @@ int main(int argc, char *argv[])
                case 'o':
                case 'w':
                case 'W':
+               case Waitclean:
                case 'K': if (!mode) newmode = MISC; break;
                }
                if (mode && newmode == mode) {
@@ -360,6 +363,12 @@ int main(int argc, char *argv[])
                        writemostly = 1;
                        continue;
 
+               case O(MANAGE,'w'):
+                       /* clear write-mostly for following devices */
+                       writemostly = 2;
+                       continue;
+
+
                case O(GROW,'z'):
                case O(CREATE,'z'): /* size */
                        if (size >= 0) {
@@ -637,6 +646,7 @@ int main(int argc, char *argv[])
                        continue;
 
                case O(ASSEMBLE,'c'): /* config file */
+               case O(INCREMENTAL, 'c'):
                case O(MISC, 'c'):
                case O(MONITOR,'c'):
                        if (configfile) {
@@ -745,21 +755,6 @@ int main(int argc, char *argv[])
                        runstop = -1;
                        continue;
 
-               case O(MANAGE,'o'):
-                       if (readonly < 0) {
-                               fprintf(stderr, Name ": Cannot have both readonly and readwrite\n");
-                               exit(2);
-                       }
-                       readonly = 1;
-                       continue;
-               case O(MANAGE,'w'):
-                       if (readonly > 0) {
-                               fprintf(stderr, Name ": Cannot have both readwrite and readonly.\n");
-                               exit(2);
-                       }
-                       readonly = -1;
-                       continue;
-
                case O(MISC,'Q'):
                case O(MISC,'D'):
                case O(MISC,'E'):
@@ -770,6 +765,7 @@ int main(int argc, char *argv[])
                case O(MISC,'o'):
                case O(MISC,'w'):
                case O(MISC,'W'):
+               case O(MISC, Waitclean):
                        if (devmode && devmode != opt &&
                            (devmode == 'E' || (opt == 'E' && devmode != 'Q'))) {
                                fprintf(stderr, Name ": --examine/-E cannot be given with -%c\n",
@@ -947,8 +943,9 @@ int main(int argc, char *argv[])
                        exit(2);
                }
                if (mode == MANAGE || mode == GROW)
-                       autof=1; /* Don't create */
-               mdfd = open_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) {
@@ -1012,7 +1009,7 @@ int main(int argc, char *argv[])
                                        devlist->devname);
                                rv |= 1;
                        } else {
-                               mdfd = open_mddev(devlist->devname,
+                               mdfd = create_mddev(devlist->devname,
                                                  array_ident->autof ? array_ident->autof : autof);
                                if (mdfd < 0)
                                        rv |= 1;
@@ -1044,7 +1041,7 @@ int main(int argc, char *argv[])
                                        rv |= 1;
                                        continue;
                                }
-                               mdfd = open_mddev(dv->devname,
+                               mdfd = create_mddev(dv->devname,
                                                  array_ident->autof ?array_ident->autof : autof);
                                if (mdfd < 0) {
                                        rv |= 1;
@@ -1073,7 +1070,7 @@ int main(int argc, char *argv[])
                        }
                        for (; array_list; array_list = array_list->next) {
                                mdu_array_info_t array;
-                               mdfd = open_mddev(array_list->devname,
+                               mdfd = create_mddev(array_list->devname,
                                                  array_list->autof ? array_list->autof : autof);
                                if (mdfd < 0) {
                                        rv |= 1;
@@ -1155,7 +1152,7 @@ int main(int argc, char *argv[])
                        break;
                }
                if (raiddisks == 0) {
-                       fprintf(stderr, Name ": no raid-disks specified.\n");
+                       fprintf(stderr, Name ": no raid-devices specified.\n");
                        rv = 1;
                        break;
                }
@@ -1179,7 +1176,7 @@ int main(int argc, char *argv[])
                        break;
                }
                if (raiddisks == 0) {
-                       fprintf(stderr, Name ": no raid-disks specified.\n");
+                       fprintf(stderr, Name ": no raid-devices specified.\n");
                        rv = 1;
                        break;
                }
@@ -1280,6 +1277,8 @@ int main(int argc, char *argv[])
                                        rv |= ExamineBitmap(dv->devname, brief, ss); continue;
                                case 'W':
                                        rv |= Wait(dv->devname); continue;
+                               case Waitclean:
+                                       rv |= WaitClean(dv->devname, verbose-quiet); continue;
                                }
                                mdfd = open_mddev(dv->devname, 1);
                                if (mdfd>=0) {