• Chuck Lever's avatar
    NFS: Don't free a state ID the server does not recognize · 89af2739
    Chuck Lever authored
    The result of a TEST_STATEID operation can indicate a few different
    things:
    
      o If NFS_OK is returned, then the client can continue using the
        state ID under test, and skip recovery.
    
      o RFC 5661 says that if the state ID was revoked, then the client
        must perform an explicit FREE_STATEID before trying to re-open.
    
      o If the server doesn't recognize the state ID at all, then no
        FREE_STATEID is needed, and the client can immediately continue
        with open recovery.
    
    Let's err on the side of caution: if the server clearly tells us the
    state ID is unknown, we skip the FREE_STATEID.  For any other error,
    we issue a FREE_STATEID.  Sometimes that FREE_STATEID will be
    unnecessary, but leaving unused state IDs on the server needlessly
    ties up resources.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    89af2739
nfs4proc.c 181 KB