aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-raid.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/dm-raid.c')
-rw-r--r--drivers/md/dm-raid.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
index 8abde6b8cedc..6d53810963f7 100644
--- a/drivers/md/dm-raid.c
+++ b/drivers/md/dm-raid.c
@@ -266,7 +266,7 @@ static struct raid_type {
266 {"raid10_offset", "raid10 offset (striped mirrors)", 0, 2, 10, ALGORITHM_RAID10_OFFSET}, 266 {"raid10_offset", "raid10 offset (striped mirrors)", 0, 2, 10, ALGORITHM_RAID10_OFFSET},
267 {"raid10_near", "raid10 near (striped mirrors)", 0, 2, 10, ALGORITHM_RAID10_NEAR}, 267 {"raid10_near", "raid10 near (striped mirrors)", 0, 2, 10, ALGORITHM_RAID10_NEAR},
268 {"raid10", "raid10 (striped mirrors)", 0, 2, 10, ALGORITHM_RAID10_DEFAULT}, 268 {"raid10", "raid10 (striped mirrors)", 0, 2, 10, ALGORITHM_RAID10_DEFAULT},
269 {"raid4", "raid4 (dedicated last parity disk)", 1, 2, 4, ALGORITHM_PARITY_N}, /* raid4 layout = raid5_n */ 269 {"raid4", "raid4 (dedicated first parity disk)", 1, 2, 5, ALGORITHM_PARITY_0}, /* raid4 layout = raid5_0 */
270 {"raid5_n", "raid5 (dedicated last parity disk)", 1, 2, 5, ALGORITHM_PARITY_N}, 270 {"raid5_n", "raid5 (dedicated last parity disk)", 1, 2, 5, ALGORITHM_PARITY_N},
271 {"raid5_ls", "raid5 (left symmetric)", 1, 2, 5, ALGORITHM_LEFT_SYMMETRIC}, 271 {"raid5_ls", "raid5 (left symmetric)", 1, 2, 5, ALGORITHM_LEFT_SYMMETRIC},
272 {"raid5_rs", "raid5 (right symmetric)", 1, 2, 5, ALGORITHM_RIGHT_SYMMETRIC}, 272 {"raid5_rs", "raid5 (right symmetric)", 1, 2, 5, ALGORITHM_RIGHT_SYMMETRIC},
@@ -2087,11 +2087,11 @@ static int super_init_validation(struct raid_set *rs, struct md_rdev *rdev)
2087 /* 2087 /*
2088 * No takeover/reshaping, because we don't have the extended v1.9.0 metadata 2088 * No takeover/reshaping, because we don't have the extended v1.9.0 metadata
2089 */ 2089 */
2090 if (le32_to_cpu(sb->level) != mddev->level) { 2090 if (le32_to_cpu(sb->level) != mddev->new_level) {
2091 DMERR("Reshaping/takeover raid sets not yet supported. (raid level/stripes/size change)"); 2091 DMERR("Reshaping/takeover raid sets not yet supported. (raid level/stripes/size change)");
2092 return -EINVAL; 2092 return -EINVAL;
2093 } 2093 }
2094 if (le32_to_cpu(sb->layout) != mddev->layout) { 2094 if (le32_to_cpu(sb->layout) != mddev->new_layout) {
2095 DMERR("Reshaping raid sets not yet supported. (raid layout change)"); 2095 DMERR("Reshaping raid sets not yet supported. (raid layout change)");
2096 DMERR(" 0x%X vs 0x%X", le32_to_cpu(sb->layout), mddev->layout); 2096 DMERR(" 0x%X vs 0x%X", le32_to_cpu(sb->layout), mddev->layout);
2097 DMERR(" Old layout: %s w/ %d copies", 2097 DMERR(" Old layout: %s w/ %d copies",
@@ -2102,7 +2102,7 @@ static int super_init_validation(struct raid_set *rs, struct md_rdev *rdev)
2102 raid10_md_layout_to_copies(mddev->layout)); 2102 raid10_md_layout_to_copies(mddev->layout));
2103 return -EINVAL; 2103 return -EINVAL;
2104 } 2104 }
2105 if (le32_to_cpu(sb->stripe_sectors) != mddev->chunk_sectors) { 2105 if (le32_to_cpu(sb->stripe_sectors) != mddev->new_chunk_sectors) {
2106 DMERR("Reshaping raid sets not yet supported. (stripe sectors change)"); 2106 DMERR("Reshaping raid sets not yet supported. (stripe sectors change)");
2107 return -EINVAL; 2107 return -EINVAL;
2108 } 2108 }
@@ -2115,6 +2115,8 @@ static int super_init_validation(struct raid_set *rs, struct md_rdev *rdev)
2115 return -EINVAL; 2115 return -EINVAL;
2116 } 2116 }
2117 2117
2118 DMINFO("Discovered old metadata format; upgrading to extended metadata format");
2119
2118 /* Table line is checked vs. authoritative superblock */ 2120 /* Table line is checked vs. authoritative superblock */
2119 rs_set_new(rs); 2121 rs_set_new(rs);
2120 } 2122 }
@@ -2258,7 +2260,8 @@ static int super_validate(struct raid_set *rs, struct md_rdev *rdev)
2258 if (!mddev->events && super_init_validation(rs, rdev)) 2260 if (!mddev->events && super_init_validation(rs, rdev))
2259 return -EINVAL; 2261 return -EINVAL;
2260 2262
2261 if (le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) { 2263 if (le32_to_cpu(sb->compat_features) &&
2264 le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) {
2262 rs->ti->error = "Unable to assemble array: Unknown flag(s) in compatible feature flags"; 2265 rs->ti->error = "Unable to assemble array: Unknown flag(s) in compatible feature flags";
2263 return -EINVAL; 2266 return -EINVAL;
2264 } 2267 }
@@ -3646,7 +3649,7 @@ static void raid_resume(struct dm_target *ti)
3646 3649
3647static struct target_type raid_target = { 3650static struct target_type raid_target = {
3648 .name = "raid", 3651 .name = "raid",
3649 .version = {1, 9, 0}, 3652 .version = {1, 9, 1},
3650 .module = THIS_MODULE, 3653 .module = THIS_MODULE,
3651 .ctr = raid_ctr, 3654 .ctr = raid_ctr,
3652 .dtr = raid_dtr, 3655 .dtr = raid_dtr,