From: NeilBrown Date: Tue, 1 Feb 2011 03:44:02 +0000 (+1100) Subject: Allow explicitly listed spared to be included by default. X-Git-Tag: mdadm-3.2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5d10dcec81b46f68d18408dcdced4235df99c55;p=thirdparty%2Fmdadm.git 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 --- 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 */