From: NeilBrown Date: Wed, 27 Jan 2010 22:01:36 +0000 (+1100) Subject: Assemble: error-check ->load_super X-Git-Tag: mdadm-3.1.2~57 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9f22b13fe1726f3ac4da423a3e56441590c28d9f;p=thirdparty%2Fmdadm.git 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 --- diff --git a/Assemble.c b/Assemble.c index 014d644b..7f900489 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);