nfsd41: Deny new lock before RECLAIM_COMPLETE done
Subsystems (2)
PATCH 1/1 nfsd41: Deny new lock before RECLAIM_COMPLETE done
Before nfs41 client's RECLAIM_COMPLETE done, nfs server should deny it's new lock.
--- fs/nfsd/nfs4state.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)
fs/nfsd/nfs4state.c +9 -0
@@ -3803,6 +3803,15 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,*/ struct nfs4_stateid *open_stp =NULL ; +/* +* RFC5661 18.51.3 +* Before RECLAIM_COMPLETE done, return NFS4ERR_GRACE +*/ + status = nfserr_grace; +if (nfsd4_has_session (cstate) && + !cstate->session->se_client->cl_firststate) + goto out; + status = nfserr_stale_clientid;if (!nfsd4_has_session (cstate) &&STALE_CLIENTID (&lock->lk_new_clientid))
Signature · 1 line
1.7.4.1
Quoted 4 lines · Mi Jinlong
Before nfs41 client's
RECLAIM_COMPLETEdone, nfs server should deny it's new lock.Signed-off-by Mi Jinlong <[email protected]>
Is nfserr_grace the right error? (Honest question, I haven't looked it up.)
Also I'd think this check should go in nfsd4_open: opens are also prohibited before RECLAIM_COMPLETE, and if we check there then we don't need to check here, as you have to have open state before you can do a lock.
--b.
Quoted 28 lines
--- fs/nfsd/nfs4state.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)fs/nfsd/nfs4state.c +9
-0@@ -3803,6 +3803,15 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,*/ struct nfs4_stateid *open_stp =NULL ; +/* +* RFC5661 18.51.3 +* Before RECLAIM_COMPLETE done, return NFS4ERR_GRACE +*/ + status = nfserr_grace; +if (nfsd4_has_session (cstate) && + !cstate->session->se_client->cl_firststate) + goto out; + status = nfserr_stale_clientid;if (!nfsd4_has_session (cstate) &&STALE_CLIENTID (&lock->lk_new_clientid))Signature · 1 line
1.7.4.1
Hi Bruce,
Sorry for so late to reply you.
J. Bruce Fields:
Quoted 8 lines · Mi Jinlong
Quoted 4 lines
Before nfs41 client's
RECLAIM_COMPLETEdone, nfs server should deny it's new lock.Signed-off-by Mi Jinlong <[email protected]>Is
nfserr_gracethe right error? (Honest question, I haven't looked it up.)
Yes, rfc5661 says:
" Whenever a client establishes a new client ID and before it does the
first non-reclaim operation that obtains a lock, it MUST send a RECLAIM_COMPLETE with rca_one_fs set to FALSE, even if there are no locks to reclaim. If non-reclaim locking operations are done before the RECLAIM_COMPLETE, an NFS4ERR_GRACE error will be returned. "
Quoted 5 lines
Also I'd think this check should go in
nfsd4_open: opens are also prohibited beforeRECLAIM_COMPLETE, and if we check there then we don't need to check here, as you have to have open state before you can do a lock.
Agree with you, what about the following one??
Signature · 4 lines
---- thanks Mi Jinlong ===============================
Mi Jinlong :
Quoted 21 lines
Hi Bruce,
Sorry for so late to reply you.
J. Bruce Fields:
Quoted 7 lines · Mi Jinlong
Quoted 4 lines
Before nfs41 client's
RECLAIM_COMPLETEdone, nfs server should deny it's new lock.Signed-off-by Mi Jinlong <[email protected]>Is
nfserr_gracethe right error? (Honest question, I haven't looked it up.)Yes, rfc5661 says:
" Whenever a client establishes a new client ID and before it does the
first non-reclaim operation that obtains a lock, it MUST send aRECLAIM_COMPLETEwithrca_one_fsset to FALSE, even if there are no locks to reclaim. If non-reclaim locking operations are done before theRECLAIM_COMPLETE, anNFS4ERR_GRACEerror will be returned. "
Quoted 6 lines
Quoted 4 lines
Also I'd think this check should go in
nfsd4_open: opens are also prohibited beforeRECLAIM_COMPLETE, and if we check there then we don't need to check here, as you have to have open state before you can do a lock.Agree with you, what about the following one??
After this patch, we should add a new patch to pynfs41 test site. Otherwise, the test site will walk out.
----
thanks
Mi Jinlong
Quoted 1 line
From
baa71190a279f6b35a919088d985482dedf06a71Mon Sep 17 00:00:00 2001
From: Mi Jinlong <[email protected]>
Date: Tue, 10 May 2011 14:14:38 +0800
Subject: [PATCH] CLNT: Send RECLAIM_COMPLETE to server before do 'maketree'
--- nfs4.1/server41tests/environment.py | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
nfs4.1/server41tests/environment.py +4 -0
@@ -157,6 +157,10 @@ class Environment(testmod.Environment): def _maketree(self, sess): """Make test tree""" + # RECLAIM_COMPLETE + res = sess.compound([op.reclaim_complete(FALSE)]) + check(res) + # ensure /tmp (and path leading up) exists path = [] for comp in self.opts.home:
Signature · 1 line
1.7.4.5