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>
This commit is contained in:
NeilBrown 2010-11-30 16:56:01 +11:00
parent 5a31170d95
commit 484ae54d16
1 changed files with 6 additions and 4 deletions

View File

@ -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) {