summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2010-11-30 16:56:01 +1100
committerNeilBrown <neilb@suse.de>2011-03-10 17:21:19 +1100
commit321e575910214cb66212a436729c18736542f6bb (patch)
tree2147687e074814b7edb25b060baf9d7d0e0c43cd
parent515afde355330a2a7643e979418e4d586504650c (diff)
downloadmdadm-321e575910214cb66212a436729c18736542f6bb.tar.gz
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 <neilb@suse.de>
-rw-r--r--Assemble.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/Assemble.c b/Assemble.c
index afd4e60..ea3a648 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) {