]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
config: Don't require an array to have a device name.
authorNeilBrown <neilb@suse.de>
Tue, 4 Nov 2008 09:50:38 +0000 (20:50 +1100)
committerNeilBrown <neilb@suse.de>
Tue, 4 Nov 2008 09:50:38 +0000 (20:50 +1100)
i.e. in mdadm.conf you can have a line like

   ARRAY uuid=whatever

and it will use auto-name-generation to give a name to the array at
assemble-time.  The is different from blind auto-assembly in that the
array will be treated as 'local'.

Incremental.c
Monitor.c
config.c
mdadm.c

index 30bca4aa412a2c0de0e211ac490963a026b5b6a0..55a5f10c78b49b2a7c7c4efe002021f792826548 100644 (file)
@@ -154,7 +154,7 @@ int Incremental(char *devname, int verbose, int runstop,
                if (array_list->uuid_set &&
                    same_uuid(array_list->uuid, info.uuid, st->ss->swapuuid)
                    == 0) {
-                       if (verbose >= 2)
+                       if (verbose >= 2 && array_list->devname)
                                fprintf(stderr, Name
                                        ": UUID differs from %s.\n",
                                        array_list->devname);
@@ -162,7 +162,7 @@ int Incremental(char *devname, int verbose, int runstop,
                }
                if (array_list->name[0] &&
                    strcasecmp(array_list->name, info.name) != 0) {
-                       if (verbose >= 2)
+                       if (verbose >= 2 && array_list->devname)
                                fprintf(stderr, Name
                                        ": Name differs from %s.\n",
                                        array_list->devname);
@@ -170,7 +170,7 @@ int Incremental(char *devname, int verbose, int runstop,
                }
                if (array_list->devices &&
                    !match_oneof(array_list->devices, devname)) {
-                       if (verbose >= 2)
+                       if (verbose >= 2 && array_list->devname)
                                fprintf(stderr, Name
                                        ": Not a listed device for %s.\n",
                                        array_list->devname);
@@ -178,7 +178,7 @@ int Incremental(char *devname, int verbose, int runstop,
                }
                if (array_list->super_minor != UnSet &&
                    array_list->super_minor != info.array.md_minor) {
-                       if (verbose >= 2)
+                       if (verbose >= 2 && array_list->devname)
                                fprintf(stderr, Name
                                        ": Different super-minor to %s.\n",
                                        array_list->devname);
@@ -188,7 +188,7 @@ int Incremental(char *devname, int verbose, int runstop,
                    !array_list->name[0] &&
                    !array_list->devices &&
                    array_list->super_minor == UnSet) {
-                       if (verbose  >= 2)
+                       if (verbose >= 2 && array_list->devname)
                                fprintf(stderr, Name
                             ": %s doesn't have any identifying information.\n",
                                        array_list->devname);
@@ -197,10 +197,15 @@ int Incremental(char *devname, int verbose, int runstop,
                /* FIXME, should I check raid_disks and level too?? */
 
                if (match) {
-                       if (verbose >= 0)
-                               fprintf(stderr, Name
+                       if (verbose >= 0) {
+                               if (match->devname && array_list->devname)
+                                       fprintf(stderr, Name
                   ": we match both %s and %s - cannot decide which to use.\n",
-                                       match->devname, array_list->devname);
+                                               match->devname, array_list->devname);
+                               else
+                                       fprintf(stderr, Name
+                                               ": multiple lines in mdadm.conf match\n");
+                       }
                        return 2;
                }
                match = array_list;
@@ -656,7 +661,8 @@ int IncrementalScan(int verbose)
                }
                /* Ok, we can try this one.   Maybe it needs a bitmap */
                for (mddev = devs ; mddev ; mddev = mddev->next)
-                       if (strcmp(mddev->devname, me->path) == 0)
+                       if (mddev->devname
+                           && strcmp(mddev->devname, me->path) == 0)
                                break;
                if (mddev && mddev->bitmap_file) {
                        /*
index 1c190577ab04417473d345ce89047e5896e99674..0e2e6bc7011ceeec31c929c480c74186616299e8 100644 (file)
--- a/Monitor.c
+++ b/Monitor.c
@@ -165,7 +165,10 @@ int Monitor(mddev_dev_t devlist,
        if (devlist == NULL) {
                mddev_ident_t mdlist = conf_get_ident(NULL);
                for (; mdlist; mdlist=mdlist->next) {
-                       struct state *st = malloc(sizeof *st);
+                       struct state *st;
+                       if (mdlist->devname == NULL)
+                               continue;
+                       st = malloc(sizeof *st);
                        if (st == NULL)
                                continue;
                        st->devname = strdup(mdlist->devname);
index 02ab3e00cadf43a3eed2ff429ac17ac4926b6933..f08a9f077d420b55b47dc37c0710232c758257cf 100644 (file)
--- a/config.c
+++ b/config.c
@@ -529,14 +529,12 @@ void arrayline(char *line)
                                w);
                }
        }
-       if (mis.devname == NULL)
-               fprintf(stderr, Name ": ARRAY line with no device\n");
-       else if (mis.uuid_set == 0 && mis.devices == NULL && mis.super_minor == UnSet && mis.name[0] == 0)
+       if (mis.uuid_set == 0 && mis.devices == NULL && mis.super_minor == UnSet && mis.name[0] == 0)
                fprintf(stderr, Name ": ARRAY line %s has no identity information.\n", mis.devname);
        else {
                mi = malloc(sizeof(*mi));
                *mi = mis;
-               mi->devname = strdup(mis.devname);
+               mi->devname = mis.devname ? strdup(mis.devname) : NULL;
                mi->next = NULL;
                *mddevlp = mi;
                mddevlp = &mi->next;
@@ -721,7 +719,8 @@ mddev_ident_t conf_get_ident(char *dev)
        mddev_ident_t rv;
        load_conffile();
        rv = mddevlist;
-       while (dev && rv && strcmp(dev, rv->devname)!=0)
+       while (dev && rv && (rv->devname == NULL
+                            || strcmp(dev, rv->devname)!=0))
                rv = rv->next;
        return rv;
 }
diff --git a/mdadm.c b/mdadm.c
index f3086a92a8483484c7c02100c8cf537e7d9ecf7b..b2ec6f904163203252935898257e17147184c908 100644 (file)
--- a/mdadm.c
+++ b/mdadm.c
@@ -1082,16 +1082,6 @@ int main(int argc, char *argv[])
                                exit(1);
                        }
                        for (; array_list; array_list = array_list->next) {
-                               mdfd = open_mddev(array_list->devname, 0);
-                               if (mdfd >= 0) {
-                                       mdu_array_info_t array;
-                                       /* skip if already assembled */
-                                       if (ioctl(mdfd, GET_ARRAY_INFO, &array)>=0) {
-                                               cnt++;
-                                               close(mdfd);
-                                               continue;
-                                       }
-                               }
                                if (array_list->autof == 0)
                                        array_list->autof = autof;