summaryrefslogtreecommitdiff
path: root/Assemble.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2011-02-01 14:44:02 +1100
committerNeilBrown <neilb@suse.de>2011-02-01 14:44:02 +1100
commita5d10dcec81b46f68d18408dcdced4235df99c55 (patch)
tree6ce53313cb8e24a0434dc579c21867feab3501d1 /Assemble.c
parente5508b361d970a7657c9f81303223fa114bdcd9b (diff)
Allow explicitly listed spared to be included by default.
When the metadata doesn't identify which array a spare belongs to we normally require an explicit domain match to connect a spare with an array. However when the spare is explicitly listed in argv, it should be safe to include as long as there is no domain conflict. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'Assemble.c')
-rw-r--r--Assemble.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/Assemble.c b/Assemble.c
index b3f54ce4..113c29cb 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -595,10 +595,15 @@ int Assemble(struct supertype *st, char *mddev,
tmpdev->devname, strerror(errno));
tmpdev->used = 2;
} else {
- struct dev_policy *pol = NULL;
- pol = devnum_policy(stb.st_rdev);
- if (domain_test(domains, pol, NULL) == 1)
- /* take this spare if domains match */
+ struct dev_policy *pol = devnum_policy(stb.st_rdev);
+ int dt = domain_test(domains, pol, NULL);
+ if (inargv && dt != 0)
+ /* take this spare as domains match
+ * if there are any */
+ tmpdev->used = 1;
+ else if (!inargv && dt == 1)
+ /* device wasn't explicitly listed, so need
+ * explicit domain match - which we have */
tmpdev->used = 1;
else
/* if domains don't match mark as unused */