From: NeilBrown Date: Thu, 2 Sep 2010 00:04:26 +0000 (+1000) Subject: Factor out path_policy functon. X-Git-Tag: mdadm-3.2~323 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=73c9c47c70e52e4018f0adbaee136ec0d505382b;p=thirdparty%2Fmdadm.git Factor out path_policy functon. Allow disk-policy to be computed given the path and disk type explicitly. This can be used when hunting through /dev/disk/by-path for something interesting. Signed-off-by: NeilBrown --- diff --git a/mdadm.h b/mdadm.h index 08e45440..c513c723 100644 --- a/mdadm.h +++ b/mdadm.h @@ -788,6 +788,7 @@ extern char type_part[], type_disk[]; extern void policyline(char *line, char *type); extern void policy_free(void); +extern struct dev_policy *path_policy(char *path, char *type); extern struct dev_policy *disk_policy(struct mdinfo *disk); extern void dev_policy_free(struct dev_policy *p); diff --git a/policy.c b/policy.c index 0e343b98..8aa4cc8e 100644 --- a/policy.c +++ b/policy.c @@ -333,23 +333,16 @@ static int config_rules_has_path = 0; /* * most policy comes from a set policy rules that are * read from the config file. - * disk_policy() gathers policy information for the - * disk described in the given mdinfo (disk.{major,minor}). + * path_policy() gathers policy information for the + * disk described in the given a 'path' and a 'type'. */ -struct dev_policy *disk_policy(struct mdinfo *disk) +struct dev_policy *path_policy(char *path, char *type) { - char *path = NULL; - char *type = disk_type(disk); struct pol_rule *rules; struct dev_policy *pol = NULL; if (!type) return NULL; - if (config_rules_has_path) { - path = disk_path(disk); - if (!path) - return NULL; - } rules = config_rules; @@ -369,6 +362,29 @@ struct dev_policy *disk_policy(struct mdinfo *disk) } pol_sort(&pol); pol_dedup(pol); + return pol; +} + +/* + * disk_policy() gathers policy information for the + * disk described in the given mdinfo (disk.{major,minor}). + */ +struct dev_policy *disk_policy(struct mdinfo *disk) +{ + char *path = NULL; + char *type = disk_type(disk); + struct dev_policy *pol = NULL; + + if (!type) + return NULL; + if (config_rules_has_path) { + path = disk_path(disk); + if (!path) + return NULL; + } + + pol = path_policy(path, type); + free(path); return pol; }