From 1af97990a6c8930c97f7943f0dac4b775c688274 Mon Sep 17 00:00:00 2001 From: Adam Kwolek Date: Thu, 16 Dec 2010 13:17:47 +1100 Subject: [PATCH] imsm: Block array state change during reshape Array state change is blocked due to reshape action in progress metadata changes are during applying. '1' is returned to indicate that array is clean Signed-off-by: Adam Kwolek Signed-off-by: NeilBrown --- super-intel.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/super-intel.c b/super-intel.c index 59f9b729..8fd49344 100644 --- a/super-intel.c +++ b/super-intel.c @@ -4840,6 +4840,17 @@ static int imsm_set_array_state(struct active_array *a, int consistent) __u8 map_state = imsm_check_degraded(super, dev, failed); __u32 blocks_per_unit; + if (dev->vol.migr_state && + dev->vol.migr_type == MIGR_GEN_MIGR) { + /* array state change is blocked due to reshape action + * + * '1' is returned to indicate that array is clean + */ + dprintf("imsm: imsm_set_array_state() called "\ + "during reshape.\n"); + return 1; + } + /* before we activate this array handle any missing disks */ if (consistent == 2) handle_missing(super, dev); @@ -5247,6 +5258,12 @@ static struct mdinfo *imsm_activate_spare(struct active_array *a, dprintf("imsm: activate spare: inst=%d failed=%d (%d) level=%d\n", inst, failed, a->info.array.raid_disks, a->info.array.level); + + if (dev->vol.migr_state && + dev->vol.migr_type == MIGR_GEN_MIGR) + /* No repair during migration */ + return NULL; + if (imsm_check_degraded(super, dev, failed) != IMSM_T_STATE_DEGRADED) return NULL; -- 2.47.3