summaryrefslogtreecommitdiffstats
path: root/Assemble.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-10-19 17:08:04 +1100
committerNeilBrown <neilb@suse.de>2009-10-19 17:08:04 +1100
commit8a0a0ded4af12be6db97abba7551923da3bcf8c9 (patch)
tree41540d6a6c4ae97fb9ca6bacc7f4ec2c763a938d /Assemble.c
parent7636b5a8bb4f5bb3451d355ed0bb726e0615d631 (diff)
downloadmdadm-8a0a0ded4af12be6db97abba7551923da3bcf8c9.tar.gz
mdadm-8a0a0ded4af12be6db97abba7551923da3bcf8c9.tar.xz
mdadm-8a0a0ded4af12be6db97abba7551923da3bcf8c9.zip
Assemble: handle container members better
When looking for a specific member, don't accept a different member, but step on to the next one. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'Assemble.c')
-rw-r--r--Assemble.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/Assemble.c b/Assemble.c
index 54e725a..311666c 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -408,6 +408,9 @@ int Assemble(struct supertype *st, char *mddev,
fprintf(stderr, Name ": member %s in %s is already assembled\n",
content->text_version,
devname);
+ skip:
+ if (tmpdev->content)
+ goto next_member;
tst->ss->free_super(tst);
tst = NULL;
content = NULL;
@@ -415,6 +418,21 @@ int Assemble(struct supertype *st, char *mddev,
goto loop;
return 1;
}
+ if (ident->member && ident->member[0]) {
+ char *s = strchr(content->text_version+1, '/');
+ if (s == NULL) {
+ fprintf(stderr, Name ": badly formatted version: %s\n",
+ content->text_version);
+ goto skip;
+ }
+ if (strcmp(ident->member, s+1) != 0) {
+ if (report_missmatch)
+ fprintf(stderr,
+ Name ": skipping wrong member %s\n",
+ content->text_version);
+ goto skip;
+ }
+ }
st = tst; tst = NULL;
if (!auto_assem && tmpdev->next != NULL) {
fprintf(stderr, Name ": %s is a container, but is not "