From 321e575910214cb66212a436729c18736542f6bb Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 30 Nov 2010 16:56:01 +1100 Subject: [PATCH] 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 --- Assemble.c | 10 ++++++---- 1 file 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) {