]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Assemble: handle container members better
authorNeilBrown <neilb@suse.de>
Mon, 19 Oct 2009 06:08:04 +0000 (17:08 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 19 Oct 2009 06:08:04 +0000 (17:08 +1100)
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>
Assemble.c

index 54e725aa2fbde658dfdb654e374a6ea461e6919a..311666c9a6f58bd934b5349ddbe3aceae22d1d39 100644 (file)
@@ -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 "