Spare disk activation or starting repair for one array while on second reshape is in progress, will lead to IMSM incompatible situation when 2 arrays in container shares different disks sets. This can cause that 2 processes in container /reshape and rebuild/ are in progress in parallel. This is IMSM incompatible situation also. Block spare disk activation and starting resync if any reshape in container is in progress. Signed-off-by: Adam Kwolek <adam.kwolek@xxxxxxxxx> --- super-intel.c | 33 +++++++++++++++++++++++++++++---- 1 files changed, 29 insertions(+), 4 deletions(-) diff --git a/super-intel.c b/super-intel.c index 07d47b5..5504c17 100644 --- a/super-intel.c +++ b/super-intel.c @@ -2237,6 +2237,33 @@ static int write_imsm_migr_rec(struct supertype *st) } #endif /* MDASSEMBLE */ +/* spare/missing disks activations are not allowe when + * array/container performs reshape operation, because + * all arrays in container works on the same disks set + */ +int imsm_reshape_blocks_arrays_changes(struct intel_super *super) +{ + int rv = 0; + struct intel_dev *i_dev = super->devlist; + struct imsm_dev *dev; + + /* check whole container + */ + while (i_dev) { + dev = i_dev->dev; + if (dev->vol.migr_state && + dev->vol.migr_type == MIGR_GEN_MIGR) { + /* No repair during any migration in container + */ + rv = 1; + break; + } + i_dev = i_dev->next; + } + + return rv; +} + static void getinfo_super_imsm_volume(struct supertype *st, struct mdinfo *info, char *dmap) { struct intel_super *super = st->sb; @@ -6592,10 +6619,8 @@ 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_reshape_blocks_arrays_changes(super)) + return NULL; if (a->info.array.level == 4) /* No repair for takeovered array -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html