X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=Create.c;h=36df10ddc65681b34b1fb021793f68c307b0121e;hp=f63afa833cf02592e4593e6b6ce9b97dd2b2f107;hb=a7c6e3fb24f8335005a6ff8e0eb668faa257c941;hpb=6c40598f598874d1d4c2c4d0da0c2a9b873d768d diff --git a/Create.c b/Create.c index f63afa83..36df10dd 100644 --- a/Create.c +++ b/Create.c @@ -187,8 +187,12 @@ int Create(struct supertype *st, char *mddev, else st = NULL; } - if (have_container) + if (have_container) { subdevs = raiddisks; + first_missing = subdevs * 2; + second_missing = subdevs * 2; + insert_point = subdevs * 2; + } } if (fd >= 0) close(fd); @@ -257,6 +261,8 @@ int Create(struct supertype *st, char *mddev, return 1; } + if (size && chunk) + size &= ~(unsigned long long)(chunk - 1); newsize = size * 2; if (st && ! st->ss->validate_geometry(st, level, layout, raiddisks, chunk, size*2, NULL, &newsize, verbose>=0)) @@ -804,6 +810,7 @@ int Create(struct supertype *st, char *mddev, sysfs_uevent(&info, "change"); if (verbose >= 0) fprintf(stderr, Name ": container %s prepared.\n", mddev); + wait_for(chosen_name, mdfd); } else if (runstop == 1 || subdevs >= raiddisks) { if (st->ss->external) { switch(level) { @@ -839,7 +846,7 @@ int Create(struct supertype *st, char *mddev, ping_monitor(devnum2devname(st->container_dev)); close(container_fd); } - wait_for(chosen_name); + wait_for(chosen_name, mdfd); } else { fprintf(stderr, Name ": not starting array - not enough devices.\n"); }