From 97b51a2c2d00b79a59f2a8e37134031b0c9e0223 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Wed, 14 Oct 2020 13:12:48 +1100 Subject: Super1: allow RAID0 layout setting to be removed. Once the RAID0 layout has been set, the RAID0 array cannot be assembled on an older kernel which doesn't understand layouts. This is an intentional safety feature, but sometimes people need the ability to roll-back to a previously working configuration. So add "--update=layout-unspecified" to remove RAID0 layout information from the superblock. Running "--assemble --update=layout-unspecified" will cause the assembly the fail when run on a newer kernel, but will allow it to work on an older kernel. Signed-off-by: NeilBrown Signed-off-by: Jes Sorensen --- super1.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'super1.c') diff --git a/super1.c b/super1.c index 7664883..8b0d6ff 100644 --- a/super1.c +++ b/super1.c @@ -1551,11 +1551,15 @@ static int update_super1(struct supertype *st, struct mdinfo *info, else if (strcmp(update, "nofailfast") == 0) sb->devflags &= ~FailFast1; else if (strcmp(update, "layout-original") == 0 || - strcmp(update, "layout-alternate") == 0) { + strcmp(update, "layout-alternate") == 0 || + strcmp(update, "layout-unspecified") == 0) { if (__le32_to_cpu(sb->level) != 0) { pr_err("%s: %s only supported for RAID0\n", devname?:"", update); rv = -1; + } else if (strcmp(update, "layout-unspecified") == 0) { + sb->feature_map &= ~__cpu_to_le32(MD_FEATURE_RAID0_LAYOUT); + sb->layout = 0; } else { sb->feature_map |= __cpu_to_le32(MD_FEATURE_RAID0_LAYOUT); sb->layout = __cpu_to_le32(update[7] == 'o' ? 1 : 2); -- cgit v1.2.1