diff options
author | Adam Kwolek <adam.kwolek@intel.com> | 2011-06-09 13:00:55 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2011-06-09 13:00:55 +1000 |
commit | 3ef4403cf63ea353c37fb34cf366ad1a0d146269 (patch) | |
tree | e3ec131143a2ed53d8ff14f2c6267a1f6ff99449 /super-intel.c | |
parent | 0228d92ca3bf1b6a8b2d6d5aef9bb64d82d103fe (diff) |
imsm: FIX: Max position could not be rounded to MB
When rounded array size information from metadata is used for number
of migration units calculation it can occurs that result of units
can be smaller (-1) than required due to used (rounded) array size).
Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'super-intel.c')
-rw-r--r-- | super-intel.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/super-intel.c b/super-intel.c index 974e7448..b2142b97 100644 --- a/super-intel.c +++ b/super-intel.c @@ -7620,10 +7620,7 @@ void init_migr_record_imsm(struct supertype *st, struct imsm_dev *dev, struct imsm_map *map_dest = get_imsm_map(dev, 0); struct imsm_map *map_src = get_imsm_map(dev, 1); unsigned long long num_migr_units; - - unsigned long long array_blocks = - (((unsigned long long)__le32_to_cpu(dev->size_high)) << 32) + - __le32_to_cpu(dev->size_low); + unsigned long long array_blocks; memset(migr_rec, 0, sizeof(struct migr_record)); migr_rec->family_num = __cpu_to_le32(super->anchor->family_num); @@ -7639,7 +7636,7 @@ void init_migr_record_imsm(struct supertype *st, struct imsm_dev *dev, __cpu_to_le32(migr_rec->dest_depth_per_unit * new_data_disks); migr_rec->dest_depth_per_unit = __cpu_to_le32(migr_rec->dest_depth_per_unit); - + array_blocks = info->component_size * new_data_disks; num_migr_units = array_blocks / __le32_to_cpu(migr_rec->blocks_per_unit); @@ -8736,10 +8733,7 @@ static int imsm_manage_reshape( goto abort; } - max_position = - __le32_to_cpu(migr_rec->post_migr_vol_cap) + - ((unsigned long long)__le32_to_cpu( - migr_rec->post_migr_vol_cap_hi) << 32); + max_position = sra->component_size * ndata; while (__le32_to_cpu(migr_rec->curr_migr_unit) < __le32_to_cpu(migr_rec->num_migr_units)) { |