From 75156c4690a0c9e037b60f53430f971b0c90c902 Mon Sep 17 00:00:00 2001 From: Adam Kwolek Date: Tue, 22 Feb 2011 15:13:31 +0100 Subject: [PATCH] imsm: FIX: Report correct array size during reshape When reshape is started imsm stores new size in metadata. mdadm requires "old" size to proper initialization restarted array. When reshape is in progress getinfo_super_imsm_volume() should report computed array size value instead array size stored in metatda. Signed-off-by: Adam Kwolek Signed-off-by: NeilBrown --- super-intel.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/super-intel.c b/super-intel.c index 1b3407a..c101dca 100644 --- a/super-intel.c +++ b/super-intel.c @@ -1806,6 +1806,19 @@ static void getinfo_super_imsm_volume(struct supertype *st, struct mdinfo *info, dprintf("IMSM: General Migration checkpoint : %llu " "(%llu) -> read reshape progress : %llu\n", units, blocks_per_unit, info->reshape_progress); + unsigned long long array_blocks; + int used_disks; + + used_disks = imsm_num_data_members(dev, 1); + if (used_disks > 0) { + array_blocks = map->blocks_per_member * + used_disks; + /* round array size down to closest MB + */ + info->custom_array_size = (array_blocks + >> SECT_PER_MB_SHIFT) + << SECT_PER_MB_SHIFT; + } } case MIGR_VERIFY: /* we could emulate the checkpointing of