]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdadm.c
DDF Allow a RAID1 to be 'partially optimal'.
[thirdparty/mdadm.git] / mdadm.c
diff --git a/mdadm.c b/mdadm.c
index e7435fd9e6e98b8cdbbec5cec0867f5573eb0363..efba8dd84cd512a74aad7b70f26324935a2cd5b7 100644 (file)
--- a/mdadm.c
+++ b/mdadm.c
@@ -46,7 +46,6 @@ int main(int argc, char *argv[])
        int layout = UnSet;
        char *layout_str = NULL;
        int raiddisks = 0;
-       int max_disks = MD_SB_DISKS; /* just a default */
        int sparedisks = 0;
        struct mddev_ident_s ident;
        char *configfile = NULL;
@@ -369,7 +368,6 @@ int main(int argc, char *argv[])
                                fprintf(stderr, Name ": unrecognised metadata identifier: %s\n", optarg);
                                exit(2);
                        }
-                       max_disks = ss->max_devs;
                        continue;
 
                case O(MANAGE,'W'):
@@ -662,6 +660,8 @@ int main(int argc, char *argv[])
                                continue;
                        if (strcmp(update, "devicesize")==0)
                                continue;
+                       if (strcmp(update, "no-bitmap")==0)
+                               continue;
                        if (strcmp(update, "byteorder")==0) {
                                if (ss) {
                                        fprintf(stderr, Name ": must not set metadata type with --update=byteorder.\n");
@@ -688,10 +688,12 @@ int main(int argc, char *argv[])
                        }
                        fprintf(outf, "Valid --update options are:\n"
                "     'sparc2.2', 'super-minor', 'uuid', 'name', 'resync',\n"
-               "     'summaries', 'homehost', 'byteorder', 'devicesize'.\n");
+               "     'summaries', 'homehost', 'byteorder', 'devicesize',\n"
+               "     'no-bitmap'\n");
                        exit(outf == stdout ? 0 : 2);
 
                case O(INCREMENTAL,NoDegraded):
+                       fprintf(stderr, Name ": --no-degraded is deprecated in Incremental mode\n");
                case O(ASSEMBLE,NoDegraded): /* --no-degraded */
                        runstop = -1; /* --stop isn't allowed for --assemble,
                                       * so we overload slightly */
@@ -794,6 +796,9 @@ int main(int argc, char *argv[])
                        devmode = 'r';
                        continue;
                case O(MANAGE,'f'): /* set faulty */
+               case O(INCREMENTAL,'f'): /* r for incremental is taken, use f
+                                         * even though we will both fail and
+                                         * remove the device */
                        devmode = 'f';
                        continue;
                case O(INCREMENTAL,'R'):
@@ -814,6 +819,9 @@ int main(int argc, char *argv[])
                        }
                        runstop = -1;
                        continue;
+               case O(MANAGE,'t'):
+                       test = 1;
+                       continue;
 
                case O(MISC,'Q'):
                case O(MISC,'D'):
@@ -1048,11 +1056,6 @@ int main(int argc, char *argv[])
        }
 
        if (raiddisks) {
-               if (raiddisks > max_disks) {
-                       fprintf(stderr, Name ": invalid number of raid devices: %d\n",
-                               raiddisks);
-                       exit(2);
-               }
                if (raiddisks == 1 &&  !force && level != -5) {
                        fprintf(stderr, Name ": '1' is an unusual number of drives for an array, so it is probably\n"
                                "     a mistake.  If you really mean it you will need to specify --force before\n"
@@ -1060,13 +1063,6 @@ int main(int argc, char *argv[])
                        exit(2);
                }
        }
-       if (sparedisks) {
-               if ( sparedisks > max_disks - raiddisks) {
-                       fprintf(stderr, Name ": invalid number of spare-devices: %d\n",
-                               sparedisks);
-                       exit(2);
-               }
-       }
 
        if (homehost == NULL)
                homehost = conf_get_homehost(&require_homehost);
@@ -1093,7 +1089,7 @@ int main(int argc, char *argv[])
                        rv = Manage_ro(devlist->devname, mdfd, readonly);
                if (!rv && devs_found>1)
                        rv = Manage_subdevs(devlist->devname, mdfd,
-                                           devlist->next, verbose-quiet);
+                                           devlist->next, verbose-quiet, test);
                if (!rv && readonly < 0)
                        rv = Manage_ro(devlist->devname, mdfd, readonly);
                if (!rv && runstop)
@@ -1560,6 +1556,11 @@ int main(int argc, char *argv[])
                         ": --incremental --scan meaningless without --run.\n");
                                break;
                        }
+                       if (devmode == 'f') {
+                               fprintf(stderr, Name
+                        ": --incremental --scan --fail not supported.\n");
+                               break;
+                       }
                        rv = IncrementalScan(verbose);
                }
                if (!devlist) {
@@ -1576,6 +1577,10 @@ int main(int argc, char *argv[])
                        rv = 1;
                        break;
                }
+               if (devmode == 'f') {
+                       rv = IncrementalRemove(devlist->devname, verbose-quiet);
+                       break;
+               }
                rv = Incremental(devlist->devname, verbose-quiet, runstop,
                                 ss, homehost, require_homehost, autof);
                break;