NFSD: TEST_STATEID should not return NFS4ERR_STALE_STATEID
authorChuck Lever <chuck.lever@oracle.com>
Tue, 29 May 2012 17:56:37 +0000 (13:56 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 20 Jun 2012 12:59:40 +0000 (08:59 -0400)
commit7df302f75ee28a6a87436e93b625ef60d37d098e
tree11fcb3dd3b30eb6f42167bd7bf671cda7361933d
parent2411967305dbfb8930b9b9c11f55f6c1ef7361e1
NFSD: TEST_STATEID should not return NFS4ERR_STALE_STATEID

According to RFC 5661, the TEST_STATEID operation is not allowed to
return NFS4ERR_STALE_STATEID.  In addition, RFC 5661 says:

15.1.16.5.  NFS4ERR_STALE_STATEID (Error Code 10023)

   A stateid generated by an earlier server instance was used.  This
   error is moot in NFSv4.1 because all operations that take a stateid
   MUST be preceded by the SEQUENCE operation, and the earlier server
   instance is detected by the session infrastructure that supports
   SEQUENCE.

I triggered NFS4ERR_STALE_STATEID while testing the Linux client's
NOGRACE recovery.  Bruce suggested an additional test that could be
useful to client developers.

Lastly, RFC 5661, section 18.48.3 has this:

 o  Special stateids are always considered invalid (they result in the
    error code NFS4ERR_BAD_STATEID).

An explicit check is made for those state IDs to avoid printk noise.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4state.c
fs/nfsd/state.h