]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - mdadm.c
Make homehost information appear in superblock.
[thirdparty/mdadm.git] / mdadm.c
diff --git a/mdadm.c b/mdadm.c
index 26a2744b11160f0cff29cde5362734f02e58a619..d123e49aafbba6a9fd790e88ded260f61757e258 100644 (file)
--- a/mdadm.c
+++ b/mdadm.c
@@ -1,7 +1,7 @@
 /*
  * mdadm - manage Linux "md" devices aka RAID arrays.
  *
- * Copyright (C) 2001-2002 Neil Brown <neilb@cse.unsw.edu.au>
+ * Copyright (C) 2001-2006 Neil Brown <neilb@suse.de>
  *
  *
  *    This program is free software; you can redistribute it and/or modify
@@ -87,6 +87,8 @@ int main(int argc, char *argv[])
         */
        int autof = 0;
 
+       char *homehost = NULL;
+       char sys_hostname[256];
        char *mailaddr = NULL;
        char *program = NULL;
        int delay = 0;
@@ -153,6 +155,10 @@ int main(int argc, char *argv[])
                        }
                        continue;
 
+               case HomeHost:
+                       homehost = optarg;
+                       continue;
+
                case ':':
                case '?':
                        fputs(Usage, stderr);
@@ -441,8 +447,8 @@ int main(int argc, char *argv[])
                        }
                        continue;
 
-               case O(CREATE,3):
-               case O(BUILD,3): /* assume clean */
+               case O(CREATE,AssumeClean):
+               case O(BUILD,AssumeClean): /* assume clean */
                        assume_clean = 1;
                        continue;
 
@@ -577,6 +583,10 @@ int main(int argc, char *argv[])
                        fprintf(stderr, Name ": '--update %s' invalid.  Only 'sparc2.2', 'super-minor', 'uuid', 'resync' or 'summaries' supported\n",update);
                        exit(2);
 
+               case O(ASSEMBLE,NoDegraded): /* --no-degraded */
+                       runstop = -1; /* --stop isn't allowed for --assemble, so we overload slightly */
+                       continue;
+
                case O(ASSEMBLE,'c'): /* config file */
                case O(MISC, 'c'):
                case O(MONITOR,'c'):
@@ -655,7 +665,7 @@ int main(int argc, char *argv[])
                        devmode = 'a';
                        re_add = 0;
                        continue;
-               case O(MANAGE,6):
+               case O(MANAGE,ReAdd):
                        devmode = 'a';
                        re_add = 1;
                        continue;
@@ -719,7 +729,7 @@ int main(int argc, char *argv[])
                        test = 1;
                        continue;
 
-               case O(MISC, 22):
+               case O(MISC, Sparc22):
                        if (devmode != 'E') {
                                fprintf(stderr, Name ": --sparc2.2 only allowed with --examine\n");
                                exit(2);
@@ -744,8 +754,8 @@ int main(int argc, char *argv[])
                        ident.bitmap_fd = bitmap_fd; /* for Assemble */
                        continue;
 
-               case O(ASSEMBLE, 7):
-               case O(GROW, 7):
+               case O(ASSEMBLE, BackupFile):
+               case O(GROW, BackupFile):
                        /* Specify a file into which grow might place a backup,
                         * or from which assemble might recover a backup
                         */
@@ -769,9 +779,9 @@ int main(int argc, char *argv[])
                        fprintf(stderr, Name ": bitmap file must contain a '/', or be 'internal', or 'none'\n");
                        exit(2);
 
-               case O(GROW,4):
-               case O(BUILD,4):
-               case O(CREATE,4): /* bitmap chunksize */
+               case O(GROW,BitmapChunk):
+               case O(BUILD,BitmapChunk):
+               case O(CREATE,BitmapChunk): /* bitmap chunksize */
                        bitmap_chunk = strtol(optarg, &c, 10);
                        if (!optarg[0] || *c || bitmap_chunk < 0 ||
                                        bitmap_chunk & (bitmap_chunk - 1)) {
@@ -783,8 +793,8 @@ int main(int argc, char *argv[])
                        bitmap_chunk = bitmap_chunk ? bitmap_chunk * 1024 : 512;
                        continue;
 
-               case O(BUILD, 5):
-               case O(CREATE, 5): /* write-behind mode */
+               case O(BUILD, WriteBehind):
+               case O(CREATE, WriteBehind): /* write-behind mode */
                        write_behind = DEFAULT_MAX_WRITE_BEHIND;
                        if (optarg) {
                                write_behind = strtol(optarg, &c, 10);
@@ -889,6 +899,15 @@ int main(int argc, char *argv[])
                }
        }
 
+       if (homehost == NULL)
+               homehost = conf_get_homehost(configfile);
+       if (homehost && strcmp(homehost, "<system>")==0) {
+               if (gethostname(sys_hostname, sizeof(sys_hostname)) == 0) {
+                       sys_hostname[sizeof(sys_hostname)-1] = 0;
+                       homehost = sys_hostname;
+               }
+       }
+
        rv = 0;
        switch(mode) {
        case MANAGE:
@@ -1018,7 +1037,7 @@ int main(int argc, char *argv[])
                }
 
                rv = Create(ss, devlist->devname, mdfd, chunk, level, layout, size<0 ? 0 : size,
-                           raiddisks, sparedisks, ident.name,
+                           raiddisks, sparedisks, ident.name, homehost,
                            devs_found-1, devlist->next, runstop, verbose-quiet, force, assume_clean,
                            bitmap_file, bitmap_chunk, write_behind, delay);
                break;