summaryrefslogtreecommitdiffstats
path: root/config.c
diff options
context:
space:
mode:
authorDoug Ledford <dledford@redhat.com>2010-04-14 17:00:03 -0400
committerDoug Ledford <dledford@redhat.com>2010-04-14 17:00:03 -0400
commita62eba198bc49379b34690be6082fe93aefbfd3b (patch)
tree59b86bf0e297fbefb9517f30ce65236d758e6aeb /config.c
parent53818c957806e7b539febfa8ff0295d54be0885f (diff)
downloadmdadm-a62eba198bc49379b34690be6082fe93aefbfd3b.tar.gz
mdadm-a62eba198bc49379b34690be6082fe93aefbfd3b.tar.xz
mdadm-a62eba198bc49379b34690be6082fe93aefbfd3b.zip
Refactor code slightly to improve code reuse
Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'config.c')
-rw-r--r--config.c68
1 files changed, 23 insertions, 45 deletions
diff --git a/config.c b/config.c
index 2ccd2fd..52c0fad 100644
--- a/config.c
+++ b/config.c
@@ -695,20 +695,6 @@ void autoline(char *line)
}
}
-struct domain_ent {
- char *spare_group; /* only set this in monitor mode
- when we know what arrays we
- are watching and can reconcile
- them to domains by checking
- constituent device paths */
- struct domain_path {
- char *path;
- struct domain_path *next;
- } *paths;
- int action;
- struct supertype *st;
- struct domain_ent *next;
-};
static struct domain_ent *domain_list = NULL;
void free_domain(struct domain_ent *de)
@@ -1264,6 +1250,25 @@ struct mddev_ident_s *conf_match(struct mdinfo *info, struct supertype *st)
return match;
}
+struct domain_ent *conf_get_domain(char *devname)
+{
+ char *name = strrchr(devname, '/');
+ char *path;
+ struct domain_ent *domain;
+
+ load_conffile();
+ if (!domain_list)
+ return NULL;
+ if (!name++)
+ name = devname;
+ path = get_devpath_from_devname(name);
+ if (!path)
+ return NULL;
+ domain = get_domain_from_devpath(path);
+ free(path);
+ return domain;
+}
+
/*
* Return a linked list of arrays that are in the same domain as the
* constituent device devname. So, if we have a domain that lists ports 2
@@ -1278,18 +1283,9 @@ struct mdstat_ent *arrays_in_domain(char *devname)
struct mdstat_ent *me, *mdstat, *array_list = NULL;
struct dev_member *m;
struct domain_ent *domain, *de;
- char *name;
- char *devpath;
- load_conffile();
/* make sure name is a kernel internal name, not a path */
- name = strrchr(devname, '/');
- if (!name++)
- name = devname;
- devpath = get_devpath_from_devname(name);
- if (!devpath)
- return NULL;
- domain = get_domain_from_devpath(devpath);
+ domain = conf_get_domain(devname);
if (!domain)
return NULL;
@@ -1301,14 +1297,10 @@ struct mdstat_ent *arrays_in_domain(char *devname)
/* don't return subarrays, only containers */
m = NULL;
else for (m = mdstat->members; m; m = m->next) {
- char *member_path = get_devpath_from_devname(m->name);
- if (member_path) {
- de = get_domain_from_devpath(member_path);
- free(member_path);
- if (de == domain)
+ de = conf_get_domain(m->name);
+ if (de == domain)
/* array has at least one member in our domain*/
break;
- }
}
if (m) {
me = mdstat;
@@ -1322,26 +1314,12 @@ struct mdstat_ent *arrays_in_domain(char *devname)
free_mdstat(me);
}
}
- free(devpath);
return array_list;
}
int conf_get_domain_action(char *devname)
{
- char *name = strrchr(devname, '/');
- char *path;
- struct domain_ent *domain;
-
- load_conffile();
- if (!domain_list)
- return incremental;
- if (!name++)
- name = devname;
- path = get_devpath_from_devname(name);
- if (!path)
- return incremental;
- domain = get_domain_from_devpath(path);
- free(path);
+ struct domain_ent *domain = conf_get_domain(devname);
if (!domain)
return incremental;
return domain->action;