Re: [PATCH 03/14] NFS: State reclaim clears OPEN and LOCK state

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

 



On Mon, 2012-07-09 at 17:45 -0400, Chuck Lever wrote:
> On Jul 9, 2012, at 5:31 PM, Myklebust, Trond wrote:
> 
> > On Mon, 2012-07-09 at 16:37 -0400, Chuck Lever wrote:
> >> On Jul 9, 2012, at 4:35 PM, Myklebust, Trond wrote:
> >> 
> >>> On Mon, 2012-07-09 at 16:19 -0400, Chuck Lever wrote:
> >>>> On Jul 9, 2012, at 4:15 PM, Chuck Lever wrote:
> >>>> 
> >>>>> 
> >>>>> On Jul 9, 2012, at 4:03 PM, Myklebust, Trond wrote:
> >>>>> 
> >>>>>> On Mon, 2012-07-09 at 11:44 -0400, Chuck Lever wrote:
> >>>>>>> Before beginning state recovery, the state manager zaps open and lock
> >>>>>>> state for each open file, thus the "state->flags & flags" test in
> >>>>>>> nfs41_{open,lock}_expired() always fails during reclaim.  But open
> >>>>>>> recovery is still needed for these files.
> >>>>>>> 
> >>>>>>> To force a call to nfs4_open_expired(), change the default return
> >>>>>>> value for nfs41_check_expired_stateid() to force open recovery, and
> >>>>>>> the default return value for nfs41_check_locks() to force lock
> >>>>>>> recovery, if the requested flags are clear.  Fix suggested by Bryan
> >>>>>>> Schumaker.
> >>>>>> 
> >>>>>> This makes absolutely no sense...
> >>>>>> 
> >>>>>> The point of these function should be to test if the stateid is still
> >>>>>> valid. If it is, then we need no recovery.
> >>>>>> If the stateid is _not_ valid, then we free it, and then decide if
> >>>>>> recovery is needed. The only exception to that rule is if TEST_STATEID
> >>>>>> returns NFS4ERR_BAD_STATEID, (in which case we don't need to free the
> >>>>>> stateid but just recover immediately).
> >>>>> 
> >>>>> So you'd like to change the sense of the switch statement in my earlier patch:
> >>>>> 
> >>>>> NFS4_OK:
> >>>>>   do nothing
> >>>>> NFS4ERR_BAD_STATEID:
> >>>>>   just open
> >>>>> default:
> >>>>>   free the state ID, then open
> >>>>> 
> >>>>> I still don't think we need a FREE_STATEID call for NFS4ERR_EXPIRED, for example.  It seems to me the only cases where FREE_STATEID is needed is the _REVOKED cases.
> > 
> > I'm not sure about what the rules are for NFS4ERR_EXPIRED. As far as I'm
> > aware, NFS4ERR_EXPIRED is NFSv4.0-speak for *_STATE_REVOKED; returning
> > it as part of a TEST_STATEID makes little sense to me, so I'm taking the
> > conservative approach to it.
> 
> Based on your review comments, we have an opportunity to make this error handling more clear, which I'd like to clarify before redriving the patch.
> 
> I'm not quite sure what "conservative approach" means.  Do you want to include NFS4ERR_EXPIRED with the _REVOKED arms, treat it as evidence of a broken server, or ignore it entirely?

I mean that calling FREE_STATEID in cases where it isn't strictly needed
because the stateid is already invalid is safe. Not calling it when it
is needed ties up resources unnecessarily on the server.

-- 
Trond Myklebust
Linux NFS client maintainer

NetApp
Trond.Myklebust@xxxxxxxxxx
www.netapp.com

��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux