diff options
author | Roman Sobanski <roman.sobanski@intel.com> | 2018-06-08 12:34:18 +0200 |
---|---|---|
committer | Jes Sorensen <jsorensen@fb.com> | 2018-06-08 19:36:36 +0200 |
commit | 4a353e6ec48e35437b27978add6cd2cd015f2cfe (patch) | |
tree | e1561bebc32dc77b190cc5620faa37cf6803b14d | |
parent | Assemble.c Don't ignore faulty disk when array is auto assembled. (diff) | |
download | mdadm-4a353e6ec48e35437b27978add6cd2cd015f2cfe.tar.xz mdadm-4a353e6ec48e35437b27978add6cd2cd015f2cfe.zip |
imsm: correct num_data_stripes in metadata map for migration
When migrating an array from R0 to R10 num_data_stripes in metadata map
will not be updated. Update it to allow correct migration process.
Changes in R10 to R0 migration for clarity of code.
Signed-off-by: Roman Sobanski <roman.sobanski@intel.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
-rw-r--r-- | super-intel.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/super-intel.c b/super-intel.c index a01be132..f011a31f 100644 --- a/super-intel.c +++ b/super-intel.c @@ -9543,12 +9543,6 @@ static int apply_takeover_update(struct imsm_update_takeover *u, if (u->direction == R10_TO_R0) { unsigned long long num_data_stripes; - map->num_domains = 1; - num_data_stripes = imsm_dev_size(dev) / 2; - num_data_stripes /= map->blocks_per_strip; - num_data_stripes /= map->num_domains; - set_num_data_stripes(map, num_data_stripes); - /* Number of failed disks must be half of initial disk number */ if (imsm_count_failed(super, dev, MAP_0) != (map->num_members / 2)) @@ -9574,10 +9568,15 @@ static int apply_takeover_update(struct imsm_update_takeover *u, map->num_domains = 1; map->raid_level = 0; map->failed_disk_num = -1; + num_data_stripes = imsm_dev_size(dev) / 2; + num_data_stripes /= map->blocks_per_strip; + set_num_data_stripes(map, num_data_stripes); } if (u->direction == R0_TO_R10) { void **space; + unsigned long long num_data_stripes; + /* update slots in current disk list */ for (dm = super->disks; dm; dm = dm->next) { if (dm->index >= 0) @@ -9615,6 +9614,11 @@ static int apply_takeover_update(struct imsm_update_takeover *u, map->map_state = IMSM_T_STATE_DEGRADED; map->num_domains = 2; map->raid_level = 1; + num_data_stripes = imsm_dev_size(dev) / 2; + num_data_stripes /= map->blocks_per_strip; + num_data_stripes /= map->num_domains; + set_num_data_stripes(map, num_data_stripes); + /* replace dev<->dev_new */ dv->dev = dev_new; } |