NeilBrown: Assemble: error-check ->load_super

Martin F. Krafft madduck at alioth.debian.org
Fri Jan 29 04:04:15 UTC 2010


Module: mdadm
Branch: upstream
Commit: 9f22b13fe1726f3ac4da423a3e56441590c28d9f
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=9f22b13fe1726f3ac4da423a3e56441590c28d9f

Author: NeilBrown <neilb at suse.de>
Date:   Thu Jan 28 09:01:36 2010 +1100

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 at suse.de>

---

 Assemble.c |   18 ++++++++++++++++--
 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);




More information about the pkg-mdadm-commits mailing list