diff options
author | NeilBrown <neilb@suse.de> | 2009-10-19 17:08:04 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-10-19 17:08:04 +1100 |
commit | 8a0a0ded4af12be6db97abba7551923da3bcf8c9 (patch) | |
tree | 41540d6a6c4ae97fb9ca6bacc7f4ec2c763a938d | |
parent | 7636b5a8bb4f5bb3451d355ed0bb726e0615d631 (diff) | |
download | mdadm-8a0a0ded4af12be6db97abba7551923da3bcf8c9.tar.gz |
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>
-rw-r--r-- | Assemble.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -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 " |