From a62eba198bc49379b34690be6082fe93aefbfd3b Mon Sep 17 00:00:00 2001 From: Doug Ledford Date: Wed, 14 Apr 2010 17:00:03 -0400 Subject: Refactor code slightly to improve code reuse Signed-off-by: Doug Ledford --- config.c | 68 ++++++++++++++++++++++------------------------------------------ 1 file changed, 23 insertions(+), 45 deletions(-) (limited to 'config.c') 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; -- cgit