Re: [PATCH v2 08/14] multipathd: don't call reload_and_sync_map() from deferred_failback_tick()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <mwilck@xxxxxxxx>
> > ---
> >  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






[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux