* 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.
*/
* 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;
return 1;
}
-struct mddev_ident *conf_match(struct mdinfo *info, struct supertype *st)
+struct mddev_ident *conf_match(struct supertype *st,
+ struct mdinfo *info,
+ char *devname,
+ int verbose, int *rvp)
{
struct mddev_ident *array_list, *match;
- int verbose = 0;
- char *devname = NULL;
array_list = conf_get_ident(NULL);
match = NULL;
for (; array_list; array_list = array_list->next) {
array_list->super_minor == UnSet) {
if (verbose >= 2 && array_list->devname)
fprintf(stderr, Name
- ": %s doesn't have any identifying information.\n",
+ ": %s doesn't have any identifying"
+ " information.\n",
array_list->devname);
continue;
}
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);
+ ": we match both %s and %s - "
+ "cannot decide which to use.\n",
+ match->devname,
+ array_list->devname);
else
fprintf(stderr, Name
- ": multiple lines in mdadm.conf match\n");
+ ": multiple lines in mdadm.conf"
+ " match\n");
}
- return NULL;
+ if (rvp)
+ *rvp = 2;
+ match = NULL;
+ break;
}
match = array_list;
}
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;
+}