nfsd: reject reclaim request when client has already sent RECLAIM_COMPLETE
authorJeff Layton <jlayton@primarydata.com>
Fri, 12 Sep 2014 20:40:22 +0000 (16:40 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 17 Sep 2014 20:33:13 +0000 (16:33 -0400)
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>
fs/nfsd/nfs4state.c

index bed41f727c0b585df29cb3c8f597dbb4331087be..08fb273ad4e066100e8b2eecf14313d81507b126 100644 (file)
@@ -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;