]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdadm.c
Support fixing of byte-swapped superblocks.
[thirdparty/mdadm.git] / mdadm.c
diff --git a/mdadm.c b/mdadm.c
index 54c011e88e5d93dc74482a71a780bd2e998e10db..2b2b9be7043df8e8707c7a6e293d062a09b952c6 100644 (file)
--- a/mdadm.c
+++ b/mdadm.c
@@ -135,7 +135,7 @@ int main(int argc, char *argv[])
                        fputs(Version, stderr);
                        exit(0);
 
-               case 'v': verbose = 1;
+               case 'v': verbose++;
                        continue;
 
                case 'b':
@@ -493,6 +493,7 @@ int main(int argc, char *argv[])
                        continue;
 
                case O(BUILD,'f'): /* force honouring '-n 1' */
+               case O(GROW,'f'): /* ditto */
                case O(CREATE,'f'): /* force honouring of device list */
                case O(ASSEMBLE,'f'): /* force assembly */
                case O(MISC,'f'): /* force zero */
@@ -546,6 +547,20 @@ int main(int argc, char *argv[])
                                continue;
                        if (strcmp(update, "resync")==0)
                                continue;
+                       if (strcmp(update, "byteorder")==0) {
+                               if (ss) {
+                                       fprintf(stderr, Name ": must not set metadata type with --update=byteorder.\n");
+                                       exit(2);
+                               }
+                               for(i=0; !ss && superlist[i]; i++) 
+                                       ss = superlist[i]->match_metadata_desc("0.swap");
+                               if (!ss) {
+                                       fprintf(stderr, Name ": INTERNAL ERROR cannot find 0.swap\n");
+                                       exit(2);
+                               }
+
+                               continue;
+                       }
                        fprintf(stderr, Name ": '--update %s' invalid.  Only 'sparc2.2', 'super-minor', 'resync' or 'summaries' supported\n",update);
                        exit(2);
 
@@ -939,7 +954,7 @@ int main(int argc, char *argv[])
                                fprintf(stderr, Name ": No devices listed in %s\n", configfile?configfile:DefaultConfFile);
                                exit(1);
                        }
-                       rv = Examine(devlist, scan?!verbose:brief, scan, SparcAdjust, ss);
+                       rv = Examine(devlist, scan?(verbose>1?0:verbose+1):brief, scan, SparcAdjust, ss);
                } else {
                        if (devlist == NULL) {
                                if (devmode=='D' && scan) {
@@ -954,7 +969,7 @@ int main(int argc, char *argv[])
                                                                e->dev);
                                                        continue;
                                                }
-                                               rv |= Detail(name, !verbose, test);
+                                               rv |= Detail(name, verbose>1?0:verbose+1, test);
                                                put_md_name(name);
                                        }
                                } else  if (devmode == 'S' && scan) {
@@ -998,7 +1013,7 @@ int main(int argc, char *argv[])
                        for (dv=devlist ; dv; dv=dv->next) {
                                switch(dv->disposition) {
                                case 'D':
-                                       rv |= Detail(dv->devname, brief, test); continue;
+                                       rv |= Detail(dv->devname, brief?1+verbose:0, test); continue;
                                case 'K': /* Zero superblock */
                                        rv |= Kill(dv->devname, force); continue;
                                case 'Q':