imsm: fix: imsm_num_data_members() can return error
imsm_num_data_members() can indicate error by returning 0 value In such case size cannot be set based on 0 value. Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
e154ced310
commit
d55adef98e
|
@ -5177,18 +5177,27 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
|
|||
struct mdinfo *mdi;
|
||||
|
||||
used_disks = imsm_num_data_members(dev, -1);
|
||||
array_blocks = map->blocks_per_member * used_disks;
|
||||
/* round array size down to closest MB */
|
||||
array_blocks = (array_blocks >> SECT_PER_MB_SHIFT)
|
||||
<< SECT_PER_MB_SHIFT;
|
||||
dev->size_low = __cpu_to_le32((__u32) array_blocks);
|
||||
dev->size_high = __cpu_to_le32((__u32) (array_blocks >> 32));
|
||||
a->info.custom_array_size = array_blocks;
|
||||
a->check_reshape = 1; /* encourage manager to update
|
||||
* array size
|
||||
*/
|
||||
super->updates_pending++;
|
||||
if (used_disks > 0) {
|
||||
array_blocks =
|
||||
map->blocks_per_member *
|
||||
used_disks;
|
||||
/* round array size down to closest MB
|
||||
*/
|
||||
array_blocks = (array_blocks
|
||||
>> SECT_PER_MB_SHIFT)
|
||||
<< SECT_PER_MB_SHIFT;
|
||||
dev->size_low = __cpu_to_le32(
|
||||
(__u32) array_blocks);
|
||||
dev->size_high = __cpu_to_le32(
|
||||
(__u32) (array_blocks >> 32));
|
||||
a->info.custom_array_size = array_blocks;
|
||||
/* encourage manager to update array
|
||||
* size
|
||||
*/
|
||||
super->updates_pending++;
|
||||
|
||||
a->check_reshape = 1;
|
||||
}
|
||||
/* finalize online capacity expansion/reshape */
|
||||
for (mdi = a->info.devs; mdi; mdi = mdi->next)
|
||||
imsm_set_disk(a,
|
||||
|
|
Loading…
Reference in New Issue