summaryrefslogtreecommitdiffstats
path: root/Assemble.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2010-01-28 09:01:36 +1100
committerNeilBrown <neilb@suse.de>2010-01-28 09:02:21 +1100
commit9f22b13fe1726f3ac4da423a3e56441590c28d9f (patch)
treeb9cfaff64c541bbebb78f4643a17b522fdfc5683 /Assemble.c
parent080fd00521590cef01e4b6d8268fd998e15698cf (diff)
downloadmdadm-9f22b13fe1726f3ac4da423a3e56441590c28d9f.tar.gz
mdadm-9f22b13fe1726f3ac4da423a3e56441590c28d9f.tar.xz
mdadm-9f22b13fe1726f3ac4da423a3e56441590c28d9f.zip
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>
Diffstat (limited to 'Assemble.c')
-rw-r--r--Assemble.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/Assemble.c b/Assemble.c
index 014d644..7f90048 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -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);