In the scenario of assembling composite md arrays, e.g. /dev/md2 with /dev/md1 and /dev/md0 as components, we want /dev/md2 assembly to be delayed until the components are available. If we attempt to assemble /dev/md2 when only /dev/md0 is available /dev/md2 will not be fully initialized, and /dev/md1 will be assembled to an equally defunct /dev/md3. So teardown the early /dev/md2 on the expectation that more devices will arrive in a later assembly pass. Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> --- Assemble.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Assemble.c b/Assemble.c index a72d427f4773..9a2399ef6411 100644 --- a/Assemble.c +++ b/Assemble.c @@ -1147,16 +1147,17 @@ static int start_array(int mdfd, if (sparecnt) fprintf(stderr, " and %d spare%s", sparecnt, sparecnt==1?"":"s"); if (!enough(content->array.level, content->array.raid_disks, - content->array.layout, 1, avail)) + content->array.layout, 1, avail)) { fprintf(stderr, " - not enough to start the array.\n"); - else if (!enough(content->array.level, + ioctl(mdfd, STOP_ARRAY, NULL); + } else if (!enough(content->array.level, content->array.raid_disks, content->array.layout, clean, - avail)) + avail)) { fprintf(stderr, " - not enough to start the " "array while not clean - consider " "--force.\n"); - else { + } else { if (req_cnt == (unsigned)content->array.raid_disks) fprintf(stderr, " - need all %d to start it", req_cnt); else -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html