From: NeilBrown Date: Tue, 30 Nov 2010 05:56:01 +0000 (+1100) Subject: Assemble: call remove_partitions later. X-Git-Tag: mdadm-3.2~211 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=484ae54d16d7e4c271a484cdd691a5ba7c52d6d6;p=thirdparty%2Fmdadm.git Assemble: call remove_partitions later. We shouldn't call remove_partitions until we have made a really firm decision to include the device into the array. Signed-off-by: NeilBrown --- diff --git a/Assemble.c b/Assemble.c index a152d656..5e71a434 100644 --- a/Assemble.c +++ b/Assemble.c @@ -648,8 +648,6 @@ int Assemble(struct supertype *st, char *mddev, } dfd = dev_open(devname, O_RDWR|O_EXCL); - remove_partitions(dfd); - tst = dup_super(st); if (dfd < 0 || tst->ss->load_super(tst, dfd, NULL) != 0) { fprintf(stderr, Name ": cannot re-read metadata from %s - aborting\n", @@ -714,8 +712,6 @@ int Assemble(struct supertype *st, char *mddev, int dfd; dfd = dev_open(devname, O_RDWR|O_EXCL); - remove_partitions(dfd); - if (dfd < 0 || tst->ss->load_super(tst, dfd, NULL) != 0) { fprintf(stderr, Name ": cannot re-read metadata from %s - aborting\n", devname); @@ -1181,6 +1177,12 @@ int Assemble(struct supertype *st, char *mddev, j = chosen_drive; if (j >= 0 /* && devices[j].uptodate */) { + int dfd = dev_open(devices[j].devname, + O_RDWR|O_EXCL); + if (dfd >= 0) { + remove_partitions(dfd); + close(dfd); + } rv = add_disk(mdfd, st, content, &devices[j].i); if (rv) {