summaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4proc.c
diff options
context:
space:
mode:
authorTrond Myklebust2016-08-28 19:25:43 +0200
committerTrond Myklebust2016-08-28 20:23:26 +0200
commit045d2a6d076a2ecd7043ea543ea198af943f8b16 (patch)
tree19a7f27abb8e531c90b5de29619184d219a9d329 /fs/nfs/nfs4proc.c
parentNFSv4.1: Fix Oopsable condition in server callback races (diff)
downloadkernel-qcow2-linux-045d2a6d076a2ecd7043ea543ea198af943f8b16.tar.gz
kernel-qcow2-linux-045d2a6d076a2ecd7043ea543ea198af943f8b16.tar.xz
kernel-qcow2-linux-045d2a6d076a2ecd7043ea543ea198af943f8b16.zip
NFSv4.1: Delay callback processing when there are referring triples
If CB_SEQUENCE tells us that the processing of this request depends on the completion of one or more referring triples (see RFC 5661 Section 2.10.6.3), delay the callback processing until after the RPC requests being referred to have completed. If we end up delaying for more than 1/2 second, then fall back to returning NFS4ERR_DELAY in reply to the callback. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r--fs/nfs/nfs4proc.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 1949bbd806eb..0cc0c319cfdd 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -686,6 +686,8 @@ out_unlock:
res->sr_slot = NULL;
if (send_new_highest_used_slotid)
nfs41_notify_server(session->clp);
+ if (waitqueue_active(&tbl->slot_waitq))
+ wake_up_all(&tbl->slot_waitq);
}
int nfs41_sequence_done(struct rpc_task *task, struct nfs4_sequence_res *res)