From: NeilBrown Date: Tue, 30 Nov 2010 05:56:01 +0000 (+1100) Subject: Assemble: call remove_partitions later. X-Git-Tag: mdadm-3.1.5~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=321e575910214cb66212a436729c18736542f6bb;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 afd4e60a..ea3a6484 100644 --- a/Assemble.c +++ b/Assemble.c @@ -618,8 +618,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", @@ -669,8 +667,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); @@ -1104,6 +1100,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) {