diff --git a/mdmon.h b/mdmon.h index 62f34f7..41222e1 100644 --- a/mdmon.h +++ b/mdmon.h @@ -59,3 +59,14 @@ struct mdstat_ent *mdstat_read(int hold, int start); extern int exit_now, manager_ready; extern int mon_tid, mgr_tid; extern int monitor_loop_cnt; + +/* helper routine to determine resync completion since MaxSector is a + * moving target + */ +static inline int is_resync_complete(struct active_array *a) +{ + if (a->resync_start >= a->info.component_size) + return 1; + return 0; +} + diff --git a/super-ddf.c b/super-ddf.c index ad21e74..e8f8005 100644 --- a/super-ddf.c +++ b/super-ddf.c @@ -2748,7 +2748,7 @@ static int ddf_set_array_state(struct active_array *a, int consistent) if (consistent == 2) { /* Should check if a recovery should be started FIXME */ consistent = 1; - if (a->resync_start != ~0ULL) + if (!is_resync_complete(a)) consistent = 0; } if (consistent) @@ -2760,7 +2760,7 @@ static int ddf_set_array_state(struct active_array *a, int consistent) old = ddf->virt->entries[inst].init_state; ddf->virt->entries[inst].init_state &= ~DDF_initstate_mask; - if (a->resync_start == ~0ULL) + if (is_resync_complete(a)) ddf->virt->entries[inst].init_state |= DDF_init_full; else if (a->resync_start == 0) ddf->virt->entries[inst].init_state |= DDF_init_not; diff --git a/super-intel.c b/super-intel.c index 87cef13..7e1f986 100644 --- a/super-intel.c +++ b/super-intel.c @@ -2474,12 +2474,12 @@ static int imsm_set_array_state(struct active_array *a, int consistent) __u8 map_state = imsm_check_degraded(super, dev, failed); if (consistent == 2 && - (a->resync_start != ~0ULL || + (!is_resync_complete(a) || map_state != IMSM_T_STATE_NORMAL || dev->vol.migr_state)) consistent = 0; - if (a->resync_start == ~0ULL) { + if (is_resync_complete(a)) { /* complete intialization / resync, * recovery is completed in ->set_disk */