From: Adam Kwolek Date: Sun, 2 Oct 2011 23:31:22 +0000 (+1100) Subject: imsm: Do not mark resync during reshape X-Git-Tag: mdadm-3.2.3~143 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b91726651d9a22c1f015817dd01efba932ac3bc7;p=thirdparty%2Fmdadm.git 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 --- 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)