From: NeilBrown Date: Mon, 19 Oct 2009 06:08:04 +0000 (+1100) Subject: Assemble: handle container members better X-Git-Tag: mdadm-3.0.3~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a0a0ded4af12be6db97abba7551923da3bcf8c9;p=thirdparty%2Fmdadm.git 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 --- diff --git a/Assemble.c b/Assemble.c index 54e725aa..311666c9 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 "