summaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'config.c')
-rw-r--r--config.c52
1 files changed, 37 insertions, 15 deletions
diff --git a/config.c b/config.c
index 909f83f4..b308b6cc 100644
--- a/config.c
+++ b/config.c
@@ -63,6 +63,9 @@
* but may not wrap over lines
*
*/
+#ifndef _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 200809L
+#endif
#ifndef CONFFILE
#define CONFFILE "/etc/mdadm.conf"
@@ -77,7 +80,7 @@ char DefaultAltConfFile[] = CONFFILE2;
char DefaultAltConfDir[] = CONFFILE2 ".d";
enum linetype { Devices, Array, Mailaddr, Mailfrom, Program, CreateDev,
- Homehost, AutoMode, Policy, PartPolicy, LTEnd };
+ Homehost, HomeCluster, AutoMode, Policy, PartPolicy, LTEnd };
char *keywords[] = {
[Devices] = "devices",
[Array] = "array",
@@ -86,6 +89,7 @@ char *keywords[] = {
[Program] = "program",
[CreateDev]= "create",
[Homehost] = "homehost",
+ [HomeCluster] = "homecluster",
[AutoMode] = "auto",
[Policy] = "policy",
[PartPolicy]="part-policy",
@@ -167,10 +171,10 @@ struct mddev_dev *load_containers(void)
!is_subarray(&ent->metadata_version[9])) {
d = xmalloc(sizeof(*d));
memset(d, 0, sizeof(*d));
- me = map_by_devnm(&map, ent->dev);
+ me = map_by_devnm(&map, ent->devnm);
if (me)
d->devname = xstrdup(me->path);
- else if (asprintf(&d->devname, "/dev/%s", ent->dev) < 0) {
+ else if (asprintf(&d->devname, "/dev/%s", ent->devnm) < 0) {
free(d);
continue;
}
@@ -396,14 +400,12 @@ void arrayline(char *line)
) {
/* This is acceptable */;
if (mis.devname)
- pr_err("only give one "
- "device per ARRAY line: %s and %s\n",
+ pr_err("only give one device per ARRAY line: %s and %s\n",
mis.devname, w);
else
mis.devname = w;
}else {
- pr_err("%s is an invalid name for "
- "an md device - ignored.\n", w);
+ pr_err("%s is an invalid name for an md device - ignored.\n", w);
}
} else if (strncasecmp(w, "uuid=", 5)==0 ) {
if (mis.uuid_set)
@@ -564,6 +566,21 @@ void homehostline(char *line)
}
}
+static char *home_cluster = NULL;
+void homeclusterline(char *line)
+{
+ char *w;
+
+ for (w=dl_next(line); w != line ; w=dl_next(w)) {
+ if (home_cluster == NULL) {
+ if (strcasecmp(w, "<none>")==0)
+ home_cluster = xstrdup("");
+ else
+ home_cluster = xstrdup(w);
+ }
+ }
+}
+
char auto_yes[] = "yes";
char auto_no[] = "no";
char auto_homehost[] = "homehost";
@@ -726,6 +743,9 @@ void conf_file(FILE *f)
case Homehost:
homehostline(line);
break;
+ case HomeCluster:
+ homeclusterline(line);
+ break;
case AutoMode:
autoline(line);
break;
@@ -886,6 +906,12 @@ char *conf_get_homehost(int *require_homehostp)
return home_host;
}
+char *conf_get_homecluster(void)
+{
+ load_conffile();
+ return home_cluster;
+}
+
struct createinfo *conf_get_create_info(void)
{
load_conffile();
@@ -1121,8 +1147,7 @@ struct mddev_ident *conf_match(struct supertype *st,
!array_list->devices &&
array_list->super_minor == UnSet) {
if (verbose >= 2 && array_list->devname)
- pr_err("%s doesn't have any identifying"
- " information.\n",
+ pr_err("%s doesn't have any identifying information.\n",
array_list->devname);
continue;
}
@@ -1131,13 +1156,11 @@ struct mddev_ident *conf_match(struct supertype *st,
if (match) {
if (verbose >= 0) {
if (match->devname && array_list->devname)
- pr_err("we match both %s and %s - "
- "cannot decide which to use.\n",
+ pr_err("we match both %s and %s - cannot decide which to use.\n",
match->devname,
array_list->devname);
else
- pr_err("multiple lines in mdadm.conf"
- " match\n");
+ pr_err("multiple lines in mdadm.conf match\n");
}
if (rvp)
*rvp = 2;
@@ -1174,8 +1197,7 @@ int conf_verify_devnames(struct mddev_ident *array_list)
"%s have the same name: %s\n",
nbuf, a1->devname);
} else
- pr_err("Device %s given twice"
- " in config file\n", a1->devname);
+ pr_err("Device %s given twice in config file\n", a1->devname);
return 1;
}
}