@@ -2058,32 +2058,20 @@ ghost_delay_tick(struct vectors *vecs)
}
}
-static void
-deferred_failback_tick (struct vectors *vecs)
+static bool deferred_failback_tick(struct multipath *mpp)
{
- struct multipath * mpp;
- int i;
bool need_reload;
- vector_foreach_slot (vecs->mpvec, mpp, i) {
- /*
- * deferred failback getting sooner
- */
- if (mpp->pgfailback > 0 && mpp->failback_tick > 0) {
- mpp->failback_tick--;
+ if (mpp->pgfailback <= 0 || mpp->failback_tick <= 0)
+ return false;
- if (!mpp->failback_tick &&
- need_switch_pathgroup(mpp, &need_reload)) {
- if (need_reload) {
- if (reload_and_sync_map(mpp, vecs) == 2) {
- /* multipath device removed */
- i--;
- }
- } else
- switch_pathgroup(mpp);
- }
- }
- }
+ mpp->failback_tick--;
+ if (!mpp->failback_tick &&
+ need_switch_pathgroup(mpp, &need_reload) &&
+ need_reload)
+ return true;
+ else
+ return false;
}
static void
@@ -2967,12 +2955,12 @@ static void checker_finished(struct vectors *vecs)
vector_foreach_slot(vecs->mpvec, mpp, i) {
if ((update_mpp_prio(mpp) ||
- (mpp->need_reload && mpp->synced_count > 0)) &&
+ (mpp->need_reload && mpp->synced_count > 0) ||
+ deferred_failback_tick(mpp)) &&
reload_and_sync_map(mpp, vecs) == 2)
/* multipath device deleted */
i--;
}
- deferred_failback_tick(vecs);
retry_count_tick(vecs->mpvec);
missing_uev_wait_tick(vecs);
ghost_delay_tick(vecs);
Instead, move the call inside the existing loop over vecs->mpvec and call reload_and_sync_map() from checker_finished(). Signed-off-by: Martin Wilck <mwilck@suse.com> --- multipathd/main.c | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-)