aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Piatkowski <pawel.piatkowski@intel.com>2023-10-19 16:35:25 +0200
committerJes Sorensen <jes@trained-monkey.org>2023-10-26 17:51:55 -0400
commitd8d09c1633b2f06f88633ab960aa02b41a6bdfb6 (patch)
treebc6c5cfb5ba70242a610199b36601974042967eb
parent4dde420fc3e24077ab926f79674eaae1b71de10b (diff)
downloadmdadm-d8d09c1633b2f06f88633ab960aa02b41a6bdfb6.tar.gz
Fix assembling RAID volume by using incremental
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@intel.com> Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
-rw-r--r--Assemble.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/Assemble.c b/Assemble.c
index 5be58e40..0557a007 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -1990,12 +1990,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;