aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd
diff options
context:
space:
mode:
authorAndrew Elble <aweits@rit.edu>2015-08-31 12:06:41 -0400
committerJ. Bruce Fields <bfields@redhat.com>2015-09-02 10:05:28 -0400
commita457974f1b9524a6e7d0a0be10df760e7802d32f (patch)
tree37b55e649341948a5dcff9201e68fdaeae213d16 /fs/nfsd
parentf984a7ce58ea9a12eca7f960bdf68124c8589b60 (diff)
nfsd: deal with DELEGRETURN racing with CB_RECALL
We have observed the server sending recalls for delegation stateids that have already been successfully returned. Change nfsd4_cb_recall_done() to return success if the client has returned the delegation. While this does not completely eliminate the sending of recalls for delegations that have already been returned, this does prevent unnecessarily declaring the callback path to be down. Reported-by: Eric Meddaugh <etmsys@rit.edu> Signed-off-by: Andrew Elble <aweits@rit.edu> Acked-by: Jeff Layton <jlayton@poochiereds.net> Signed-off-by: J. Bruce Fields <bfields@redhat.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 08746ec1d44a..0f1d5691b795 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -3510,6 +3510,9 @@ static int nfsd4_cb_recall_done(struct nfsd4_callback *cb,
3510{ 3510{
3511 struct nfs4_delegation *dp = cb_to_delegation(cb); 3511 struct nfs4_delegation *dp = cb_to_delegation(cb);
3512 3512
3513 if (dp->dl_stid.sc_type == NFS4_CLOSED_DELEG_STID)
3514 return 1;
3515
3513 switch (task->tk_status) { 3516 switch (task->tk_status) {
3514 case 0: 3517 case 0:
3515 return 1; 3518 return 1;