diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2012-05-29 13:56:37 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2012-06-20 08:59:40 -0400 |
commit | 7df302f75ee28a6a87436e93b625ef60d37d098e (patch) | |
tree | 11fcb3dd3b30eb6f42167bd7bf671cda7361933d /fs/nfsd/state.h | |
parent | 2411967305dbfb8930b9b9c11f55f6c1ef7361e1 (diff) | |
download | op-kernel-dev-7df302f75ee28a6a87436e93b625ef60d37d098e.zip op-kernel-dev-7df302f75ee28a6a87436e93b625ef60d37d098e.tar.gz |
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>
Diffstat (limited to 'fs/nfsd/state.h')
-rw-r--r-- | fs/nfsd/state.h | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h index 849091e..495df4e 100644 --- a/fs/nfsd/state.h +++ b/fs/nfsd/state.h @@ -475,7 +475,6 @@ extern __be32 nfs4_make_rec_clidname(char *clidname, struct xdr_netobj *clname); extern int nfs4_client_to_reclaim(const char *name); extern int nfs4_has_reclaimed_state(const char *name, bool use_exchange_id); extern void release_session_client(struct nfsd4_session *); -extern __be32 nfs4_validate_stateid(struct nfs4_client *, stateid_t *); extern void nfsd4_purge_closed_stateid(struct nfs4_stateowner *); /* nfs4recover operations */ |