summaryrefslogtreecommitdiffstats
path: root/fs/nfsd
diff options
context:
space:
mode:
authorJeff Layton <jlayton@primarydata.com>2014-09-12 22:40:22 +0200
committerJ. Bruce Fields <bfields@redhat.com>2014-09-17 22:33:13 +0200
commit3b3e7b72239a748f516d6aee8c12df48d50e2d7e (patch)
tree7ff017c72c4fb3f94fe18f22971023b881655b04 /fs/nfsd
parentnfsd: remove redundant boot_time parm from grace_done client tracking op (diff)
downloadlinux-3b3e7b72239a748f516d6aee8c12df48d50e2d7e.tar.xz
linux-3b3e7b72239a748f516d6aee8c12df48d50e2d7e.zip
nfsd: reject reclaim request when client has already sent RECLAIM_COMPLETE
As stated in RFC 5661, section 18.51.3: Once a RECLAIM_COMPLETE is done, there can be no further reclaim operations for locks whose scope is defined as having completed recovery. Once the client sends RECLAIM_COMPLETE, the server will not allow the client to do subsequent reclaims of locking state for that scope and, if these are attempted, will return NFS4ERR_NO_GRACE. Ensure that we enforce that requirement. Signed-off-by: Jeff Layton <jlayton@primarydata.com>
Diffstat (limited to 'fs/nfsd')
-rw-r--r--fs/nfsd/nfs4state.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index bed41f727c0b..08fb273ad4e0 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -5650,6 +5650,9 @@ nfs4_check_open_reclaim(clientid_t *clid,
if (status)
return nfserr_reclaim_bad;
+ if (test_bit(NFSD4_CLIENT_RECLAIM_COMPLETE, &cstate->clp->cl_flags))
+ return nfserr_no_grace;
+
if (nfsd4_client_record_check(cstate->clp))
return nfserr_reclaim_bad;