From b91726651d9a22c1f015817dd01efba932ac3bc7 Mon Sep 17 00:00:00 2001 From: Adam Kwolek Date: Mon, 3 Oct 2011 10:31:22 +1100 Subject: [PATCH] imsm: Do not mark resync during reshape During reshape, resync/rebuild in the same container is not possible due to fact that all arrays in container has to share the same disks set. Block new resync/rebuild process initialization and setting resync_start to 0 while any reshape in container is active. This avoids breaking container reshape and doesn't allow for starting multiple processes /resync/rebuild and reshape/ at the same time in md. Signed-off-by: Adam Kwolek Signed-off-by: NeilBrown --- super-intel.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/super-intel.c b/super-intel.c index f449fd86..8e9e9774 100644 --- a/super-intel.c +++ b/super-intel.c @@ -2373,8 +2373,9 @@ static void getinfo_super_imsm_volume(struct supertype *st, struct mdinfo *info, info->reshape_progress = 0; info->resync_start = MaxSector; - if (map_to_analyse->map_state == IMSM_T_STATE_UNINITIALIZED || - dev->vol.dirty) { + if ((map_to_analyse->map_state == IMSM_T_STATE_UNINITIALIZED || + dev->vol.dirty) && + imsm_reshape_blocks_arrays_changes(super) == 0) { info->resync_start = 0; } if (dev->vol.migr_state) { @@ -6230,7 +6231,8 @@ static int imsm_set_array_state(struct active_array *a, int consistent) super->updates_pending++; a->last_checkpoint = 0; } - } else if (!is_resyncing(dev) && !failed) { + } else if ((!is_resyncing(dev) && !failed) && + (imsm_reshape_blocks_arrays_changes(super) == 0)) { /* mark the start of the init process if nothing is failed */ dprintf("imsm: mark resync start\n"); if (map->map_state == IMSM_T_STATE_UNINITIALIZED) -- 2.39.2