On Thu, 2024-12-19 at 17:04 -0500, Benjamin Marzinski wrote:
> On Wed, Dec 11, 2024 at 11:59:03PM +0100, Martin Wilck wrote:
> > Instead, move the call inside the existing loop over vecs->mpvec
> > and call
> > reload_and_sync_map() from checker_finished(). Note that we can't
> > simply
> > put the call deferred_failback_tick() in the "if" condition,
> > because we
> > need to adjust the ticks even if update_mpp_prio() returns true.
> > For
> > consistency, use separate bool variables for each condition that
> > would
> > necessitate a reload.
> > 
> > Signed-off-by: Martin Wilck <mwi...@suse.com>
> > ---
> >  multipathd/main.c | 39 ++++++++++++++-------------------------
> >  1 file changed, 14 insertions(+), 25 deletions(-)
> > 
> > diff --git a/multipathd/main.c b/multipathd/main.c
> > index b045f8b..b1f0f81 100644
> > --- a/multipathd/main.c
> > +++ b/multipathd/main.c
> > @@ -2076,32 +2076,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
> 
> If (!mpp->failback_tick && need_switch_pathgroup(mpp, &need_reload)
> is
> true by need_reload isn't, don't we still need to call
> switch_pathgroup(mpp);

Ups. Good call, thanks!

Martin


Reply via email to