|
|
59ea72 |
From 4a353e6ec48e35437b27978add6cd2cd015f2cfe Mon Sep 17 00:00:00 2001
|
|
|
59ea72 |
From: Roman Sobanski <roman.sobanski@intel.com>
|
|
|
59ea72 |
Date: Fri, 8 Jun 2018 12:34:18 +0200
|
|
|
59ea72 |
Subject: [RHEL7.5 PATCH 1/1] imsm: correct num_data_stripes in metadata map
|
|
|
59ea72 |
for migration
|
|
|
59ea72 |
|
|
|
59ea72 |
When migrating an array from R0 to R10 num_data_stripes in metadata map
|
|
|
59ea72 |
will not be updated. Update it to allow correct migration process.
|
|
|
59ea72 |
Changes in R10 to R0 migration for clarity of code.
|
|
|
59ea72 |
|
|
|
59ea72 |
Signed-off-by: Roman Sobanski <roman.sobanski@intel.com>
|
|
|
59ea72 |
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
|
|
59ea72 |
---
|
|
|
59ea72 |
super-intel.c | 16 ++++++++++------
|
|
|
59ea72 |
1 file changed, 10 insertions(+), 6 deletions(-)
|
|
|
59ea72 |
|
|
|
59ea72 |
diff --git a/super-intel.c b/super-intel.c
|
|
|
59ea72 |
index a01be13..f011a31 100644
|
|
|
59ea72 |
--- a/super-intel.c
|
|
|
59ea72 |
+++ b/super-intel.c
|
|
|
59ea72 |
@@ -9543,12 +9543,6 @@ static int apply_takeover_update(struct imsm_update_takeover *u,
|
|
|
59ea72 |
if (u->direction == R10_TO_R0) {
|
|
|
59ea72 |
unsigned long long num_data_stripes;
|
|
|
59ea72 |
|
|
|
59ea72 |
- map->num_domains = 1;
|
|
|
59ea72 |
- num_data_stripes = imsm_dev_size(dev) / 2;
|
|
|
59ea72 |
- num_data_stripes /= map->blocks_per_strip;
|
|
|
59ea72 |
- num_data_stripes /= map->num_domains;
|
|
|
59ea72 |
- set_num_data_stripes(map, num_data_stripes);
|
|
|
59ea72 |
-
|
|
|
59ea72 |
/* Number of failed disks must be half of initial disk number */
|
|
|
59ea72 |
if (imsm_count_failed(super, dev, MAP_0) !=
|
|
|
59ea72 |
(map->num_members / 2))
|
|
|
59ea72 |
@@ -9574,10 +9568,15 @@ static int apply_takeover_update(struct imsm_update_takeover *u,
|
|
|
59ea72 |
map->num_domains = 1;
|
|
|
59ea72 |
map->raid_level = 0;
|
|
|
59ea72 |
map->failed_disk_num = -1;
|
|
|
59ea72 |
+ num_data_stripes = imsm_dev_size(dev) / 2;
|
|
|
59ea72 |
+ num_data_stripes /= map->blocks_per_strip;
|
|
|
59ea72 |
+ set_num_data_stripes(map, num_data_stripes);
|
|
|
59ea72 |
}
|
|
|
59ea72 |
|
|
|
59ea72 |
if (u->direction == R0_TO_R10) {
|
|
|
59ea72 |
void **space;
|
|
|
59ea72 |
+ unsigned long long num_data_stripes;
|
|
|
59ea72 |
+
|
|
|
59ea72 |
/* update slots in current disk list */
|
|
|
59ea72 |
for (dm = super->disks; dm; dm = dm->next) {
|
|
|
59ea72 |
if (dm->index >= 0)
|
|
|
59ea72 |
@@ -9615,6 +9614,11 @@ static int apply_takeover_update(struct imsm_update_takeover *u,
|
|
|
59ea72 |
map->map_state = IMSM_T_STATE_DEGRADED;
|
|
|
59ea72 |
map->num_domains = 2;
|
|
|
59ea72 |
map->raid_level = 1;
|
|
|
59ea72 |
+ num_data_stripes = imsm_dev_size(dev) / 2;
|
|
|
59ea72 |
+ num_data_stripes /= map->blocks_per_strip;
|
|
|
59ea72 |
+ num_data_stripes /= map->num_domains;
|
|
|
59ea72 |
+ set_num_data_stripes(map, num_data_stripes);
|
|
|
59ea72 |
+
|
|
|
59ea72 |
/* replace dev<->dev_new */
|
|
|
59ea72 |
dv->dev = dev_new;
|
|
|
59ea72 |
}
|
|
|
59ea72 |
--
|
|
|
59ea72 |
2.7.4
|
|
|
59ea72 |
|