Assemble: error-check ->load_super

Once load_super has succeeded, it should continue to succeed.  However
devices can disappear etc so it is prudent to always check the return
status of load_super.

Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
NeilBrown 2010-01-28 09:01:36 +11:00
parent 080fd00521
commit 9f22b13fe1
1 changed files with 16 additions and 2 deletions

View File

@ -619,7 +619,14 @@ int Assemble(struct supertype *st, char *mddev,
remove_partitions(dfd);
tst = dup_super(st);
tst->ss->load_super(tst, dfd, NULL);
if (dfd < 0 || tst->ss->load_super(tst, dfd, NULL) != 0) {
fprintf(stderr, Name ": cannot re-read metadata from %s - aborting\n",
devname);
if (dfd >= 0)
close(dfd);
close(mdfd);
return 1;
}
tst->ss->getinfo_super(tst, content);
memcpy(content->uuid, ident->uuid, 16);
@ -662,7 +669,14 @@ int Assemble(struct supertype *st, char *mddev,
remove_partitions(dfd);
tst->ss->load_super(tst, dfd, NULL);
if (dfd < 0 || tst->ss->load_super(tst, dfd, NULL) != 0) {
fprintf(stderr, Name ": cannot re-read metadata from %s - aborting\n",
devname);
if (dfd >= 0)
close(dfd);
close(mdfd);
return 1;
}
tst->ss->getinfo_super(tst, content);
tst->ss->free_super(tst);
close(dfd);