[PATCH 2/2] Fix assembling RAID volume by using incremental

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux