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>
This commit is contained in:
NeilBrown 2011-02-01 14:44:02 +11:00
parent e5508b361d
commit a5d10dcec8
1 changed files with 9 additions and 4 deletions

View File

@ -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 */