summaryrefslogtreecommitdiffstats
path: root/Assemble.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2009-10-22 11:13:13 +1100
committerNeilBrown <neilb@suse.de>2009-10-22 11:13:13 +1100
commit4a997737a14f580e3addfa1db6be005c37e7c0f4 (patch)
tree2bb5c80319e81728d54822d5b930098746c07057 /Assemble.c
parent9739642288555dae607ee4aa0eec0e9245cecf74 (diff)
parent0eb26465c0a14d707ca00f4f7bcdb67bde36f706 (diff)
downloadmdadm-4a997737a14f580e3addfa1db6be005c37e7c0f4.tar.gz
mdadm-4a997737a14f580e3addfa1db6be005c37e7c0f4.tar.xz
mdadm-4a997737a14f580e3addfa1db6be005c37e7c0f4.zip
Merge branch 'master' into devel-3.1
Diffstat (limited to 'Assemble.c')
-rw-r--r--Assemble.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/Assemble.c b/Assemble.c
index 28de83e..a52dc50 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -315,6 +315,9 @@ int Assemble(struct supertype *st, char *mddev,
}
/* It is worth looking inside this container.
*/
+ if (verbose > 0)
+ fprintf(stderr, Name ": looking in container %s\n",
+ devname);
next_member:
if (tmpdev->content)
content = tmpdev->content;
@@ -405,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;
@@ -412,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 "
@@ -420,6 +441,9 @@ int Assemble(struct supertype *st, char *mddev,
st->ss->free_super(st);
return 1;
}
+ if (verbose > 0)
+ fprintf(stderr, Name ": found match on member %s in %s\n",
+ content->text_version, devname);
break;
}
if (st == NULL)
@@ -565,6 +589,7 @@ int Assemble(struct supertype *st, char *mddev,
#endif
/* Ok, no bad inconsistancy, we can try updating etc */
bitmap_done = 0;
+ content->update_private = NULL;
for (tmpdev = devlist; tmpdev; tmpdev=tmpdev->next) if (tmpdev->used == 1) {
char *devname = tmpdev->devname;
struct stat stb;
@@ -717,6 +742,8 @@ int Assemble(struct supertype *st, char *mddev,
}
devcnt++;
}
+ free(content->update_private);
+ content->update_private = NULL;
if (devcnt == 0) {
fprintf(stderr, Name ": no devices found for %s\n",