]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - config.c
Monitor: fix inconsistencies in values for ->percent
[thirdparty/mdadm.git] / config.c
index 597e04601ff834cd9fee06c466c5be75b75179a6..d8f48e132455ce4b6fd8d7853ffa88a795329a18 100644 (file)
--- a/config.c
+++ b/config.c
@@ -641,7 +641,7 @@ void autoline(char *line)
         * We translate that to policy by creating 'auto=yes' when we see
         * a '+version' line, 'auto=no' if we see '-version' before 'homehost',
         * or 'auto=homehost' if we see '-version' after 'homehost'.
-        * When we see yes, no, +all or -all we stop an any version that hasn't
+        * When we see yes, no, +all or -all we stop and any version that hasn't
         * been seen gets an appropriate auto= entry.
         */
 
@@ -921,19 +921,19 @@ int conf_test_metadata(const char *version, struct dev_policy *pol, int is_homeh
         * else 'yes'.
         */
        struct dev_policy *p;
-       int no=0, found_auto=0;
+       int no=0, found_homehost=0;
        load_conffile();
 
        pol = pol_find(pol, pol_auto);
        pol_for_each(p, pol, version) {
                if (strcmp(p->value, "yes") == 0)
                        return 1;
-               if (strcmp(p->value, "auto") == 0)
-                       found_auto = 1;
+               if (strcmp(p->value, "homehost") == 0)
+                       found_homehost = 1;
                if (strcmp(p->value, "no") == 0)
                        no = 1;
        }
-       if (is_homehost && found_auto)
+       if (is_homehost && found_homehost)
                return 1;
        if (no)
                return 0;
@@ -1045,7 +1045,7 @@ struct mddev_ident *conf_match(struct supertype *st,
                                        array_list->devname);
                        continue;
                }
-               if (array_list->devices &&
+               if (array_list->devices && devname &&
                    !match_oneof(array_list->devices, devname)) {
                        if (verbose >= 2 && array_list->devname)
                                fprintf(stderr, Name
@@ -1096,3 +1096,36 @@ struct mddev_ident *conf_match(struct supertype *st,
        }
        return match;
 }
+
+int conf_verify_devnames(struct mddev_ident *array_list)
+{
+       struct mddev_ident *a1, *a2;
+
+       for (a1 = array_list; a1; a1 = a1->next) {
+               if (!a1->devname)
+                       continue;
+               for (a2 = a1->next; a2; a2 = a2->next) {
+                       if (!a2->devname)
+                               continue;
+                       if (strcmp(a1->devname, a2->devname) != 0)
+                               continue;
+
+                       if (a1->uuid_set && a2->uuid_set) {
+                               char nbuf[64];
+                               __fname_from_uuid(a1->uuid, 0, nbuf, ':');
+                               fprintf(stderr,
+                                       Name ": Devices %s and ",
+                                       nbuf);
+                               __fname_from_uuid(a2->uuid, 0, nbuf, ':');
+                               fprintf(stderr,
+                                       "%s have the same name: %s\n",
+                                       nbuf, a1->devname);
+                       } else
+                               fprintf(stderr, Name ": Device %s given twice"
+                                       " in config file\n", a1->devname);
+                       return 1;
+               }
+       }
+
+       return 0;
+}