dcavalca / rpms / mdadm

Forked from rpms/mdadm 3 years ago
Clone

Blame SOURCES/Avoid-to-take-spare-without-defined-domain-by-imsm.patch

2c1b57
commit 3bf9495270d7cd00da942e183dc5f7c7eb68ff69
2c1b57
Author: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
2c1b57
Date:   Thu Jan 11 12:39:49 2018 +0100
2c1b57
2c1b57
    policy.c: Avoid to take spare without defined domain by imsm
2c1b57
    
2c1b57
    Only Imsm get_disk_controller_domain returns disk controller domain for
2c1b57
    each disk. It causes that mdadm automatically creates disk controller
2c1b57
    domain policy for imsm metadata, and imsm containers in the same disk
2c1b57
    controller domain can take spare for recovery.
2c1b57
    
2c1b57
    Ignore spares if only one imsm domain is matched.
2c1b57
    
2c1b57
    Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
2c1b57
    Signed-off-by: Jes Sorensen <jsorensen@fb.com>
2c1b57
2c1b57
diff --git a/policy.c b/policy.c
2c1b57
index b17585a..c0d18a7 100644
2c1b57
--- a/policy.c
2c1b57
+++ b/policy.c
2c1b57
@@ -661,6 +661,7 @@ int domain_test(struct domainlist *dom, struct dev_policy *pol,
2c1b57
 	 *  1:  has domains, all match
2c1b57
 	 */
2c1b57
 	int found_any = -1;
2c1b57
+	int has_one_domain = 1;
2c1b57
 	struct dev_policy *p;
2c1b57
 
2c1b57
 	pol = pol_find(pol, pol_domain);
2c1b57
@@ -670,6 +671,9 @@ int domain_test(struct domainlist *dom, struct dev_policy *pol,
2c1b57
 			dom = dom->next;
2c1b57
 		if (!dom || strcmp(dom->dom, p->value) != 0)
2c1b57
 			return 0;
2c1b57
+		if (has_one_domain && metadata && strcmp(metadata, "imsm") == 0)
2c1b57
+			found_any = -1;
2c1b57
+		has_one_domain = 0;
2c1b57
 	}
2c1b57
 	return found_any;
2c1b57
 }