After change "mdadm: remove container_enough logic" IMSM volumes are started immediately. If volume is during reshape, then it will be blocked by block_subarray() during first mdadm -I <devname>. Assemble_container_content() for next disk will see the change because metadata version from sysfs and metadata doesn't match and will execute sysfs_set_array again. Then it fails to set same component_size, it is prohibited by kernel. If array is frozen then first sign from metadata version is different ("/" vs "-"), so exclude it from comparison. All we want is to double check that base properties are set and we don't need to call sysfs_set_array again. Signed-off-by: Pawel Piatkowski <pawel.piatkowski@xxxxxxxxx> --- Assemble.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Assemble.c b/Assemble.c index 49804941..add002f8 100644 --- a/Assemble.c +++ b/Assemble.c @@ -1982,12 +1982,10 @@ int assemble_container_content(struct supertype *st, int mdfd, return 1; } - if (strcmp(sra->text_version, content->text_version) != 0) { - if (content->array.major_version == -1 && - content->array.minor_version == -2 && - c->readonly && - content->text_version[0] == '/') - content->text_version[0] = '-'; + /* Fill sysfs properties only if they are not set. Determine it by checking text_version + * and ignoring special character on the first place. + */ + if (strcmp(sra->text_version + 1, content->text_version + 1) != 0) { if (sysfs_set_array(content, 9003) != 0) { sysfs_free(sra); return 1; -- 2.39.1