dcavalca / rpms / mdadm

Forked from rpms/mdadm 3 years ago
Clone
Blob Blame History Raw
commit 3bf9495270d7cd00da942e183dc5f7c7eb68ff69
Author: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
Date:   Thu Jan 11 12:39:49 2018 +0100

    policy.c: Avoid to take spare without defined domain by imsm
    
    Only Imsm get_disk_controller_domain returns disk controller domain for
    each disk. It causes that mdadm automatically creates disk controller
    domain policy for imsm metadata, and imsm containers in the same disk
    controller domain can take spare for recovery.
    
    Ignore spares if only one imsm domain is matched.
    
    Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@intel.com>
    Signed-off-by: Jes Sorensen <jsorensen@fb.com>

diff --git a/policy.c b/policy.c
index b17585a..c0d18a7 100644
--- a/policy.c
+++ b/policy.c
@@ -661,6 +661,7 @@ int domain_test(struct domainlist *dom, struct dev_policy *pol,
 	 *  1:  has domains, all match
 	 */
 	int found_any = -1;
+	int has_one_domain = 1;
 	struct dev_policy *p;
 
 	pol = pol_find(pol, pol_domain);
@@ -670,6 +671,9 @@ int domain_test(struct domainlist *dom, struct dev_policy *pol,
 			dom = dom->next;
 		if (!dom || strcmp(dom->dom, p->value) != 0)
 			return 0;
+		if (has_one_domain && metadata && strcmp(metadata, "imsm") == 0)
+			found_any = -1;
+		has_one_domain = 0;
 	}
 	return found_any;
 }