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>
This commit is contained in:
parent
7636b5a8bb
commit
8a0a0ded4a
18
Assemble.c
18
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 "
|
||||
|
|
Loading…
Reference in New Issue