diff options
Diffstat (limited to '0047-RHBZ-591608-only-switch-pgs-once.patch')
-rw-r--r-- | 0047-RHBZ-591608-only-switch-pgs-once.patch | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/0047-RHBZ-591608-only-switch-pgs-once.patch b/0047-RHBZ-591608-only-switch-pgs-once.patch new file mode 100644 index 0000000..001226a --- /dev/null +++ b/0047-RHBZ-591608-only-switch-pgs-once.patch @@ -0,0 +1,52 @@ +--- + multipathd/main.c | 20 ++++++-------------- + 1 file changed, 6 insertions(+), 14 deletions(-) + +Index: multipath-tools/multipathd/main.c +=================================================================== +--- multipath-tools.orig/multipathd/main.c ++++ multipath-tools/multipathd/main.c +@@ -965,6 +965,7 @@ check_path (struct vectors * vecs, struc + { + int newstate; + int oldpriority; ++ int new_path_up = 0; + + if (!pp->mpp) + return; +@@ -1033,16 +1034,7 @@ check_path (struct vectors * vecs, struc + else + reinstate_path(pp, 0); + +- /* +- * schedule [defered] failback +- */ +- if (pp->mpp->pgfailback > 0) +- pp->mpp->failback_tick = +- pp->mpp->pgfailback + 1; +- else if (need_switch_pathgroup(pp->mpp, 1) && +- (pp->mpp->pgfailback == -FAILBACK_IMMEDIATE || +- followover_should_failback(pp))) +- switch_pathgroup(pp->mpp); ++ new_path_up = 1; + + /* + * if at least one path is up in a group, and +@@ -1080,13 +1072,13 @@ check_path (struct vectors * vecs, struc + if (pp->priority != oldpriority && + pp->mpp->pgpolicyfn == (pgpolicyfn *)group_by_prio) + update_path_groups(pp->mpp, vecs); +- else if (need_switch_pathgroup(pp->mpp, 0)) { ++ else if (need_switch_pathgroup(pp->mpp, new_path_up)) { + if (pp->mpp->pgfailback > 0 && +- pp->mpp->failback_tick <= 0) ++ (new_path_up || pp->mpp->failback_tick <= 0)) + pp->mpp->failback_tick = + pp->mpp->pgfailback + 1; +- else if (pp->mpp->pgfailback == +- -FAILBACK_IMMEDIATE) ++ else if (pp->mpp->pgfailback == -FAILBACK_IMMEDIATE || ++ (new_path_up && followover_should_failback(pp))) + switch_pathgroup(pp->mpp); + } + } |