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>
This commit is contained in:
Mariusz Tkaczyk 2018-01-11 12:39:49 +01:00 committed by Jes Sorensen
parent ab0c6bb9fc
commit 3bf9495270
1 changed files with 4 additions and 0 deletions

View File

@ -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;
}