• Chuck Lever's avatar
    NFS: State reclaim clears OPEN and LOCK state · eb64cf96
    Chuck Lever authored
    The "state->flags & flags" test in nfs41_check_expired_stateid()
    allows the state manager to squelch a TEST_STATEID operation when
    it is known for sure that a state ID is no longer valid.  If the
    lease was purged, for example, the client already knows that state
    ID is now defunct.
    
    But open recovery is still needed for that inode.
    
    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.
    
    Also, the presence of a delegation state ID must not prevent normal
    open recovery.  The delegation state ID must be cleared if it was
    revoked, but once cleared I don't think it's presence or absence has
    any bearing on whether open recovery is still needed.  So the logic
    is adjusted to ignore the TEST_STATEID result for the delegation
    state ID.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    eb64cf96
nfs4proc.c 181 KB