summaryrefslogtreecommitdiff
path: root/super-intel.c
diff options
context:
space:
mode:
authorAdam Kwolek <adam.kwolek@intel.com>2011-02-03 17:47:52 +1100
committerNeilBrown <neilb@suse.de>2011-02-03 17:47:52 +1100
commitd55adef98e6a9ee0550857d79e7ce4568a388092 (patch)
tree2378a180072cf20350697eb01de8b9acd0bdfea5 /super-intel.c
parente154ced310878c96700cd0f73e5c5df60e6352b3 (diff)
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>
Diffstat (limited to 'super-intel.c')
-rw-r--r--super-intel.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/super-intel.c b/super-intel.c
index c29f37e6..998df3e2 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -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,