diff options
author | Trond Myklebust | 2016-08-28 19:25:43 +0200 |
---|---|---|
committer | Trond Myklebust | 2016-08-28 20:23:26 +0200 |
commit | 045d2a6d076a2ecd7043ea543ea198af943f8b16 (patch) | |
tree | 19a7f27abb8e531c90b5de29619184d219a9d329 /fs/nfs/nfs4proc.c | |
parent | NFSv4.1: Fix Oopsable condition in server callback races (diff) | |
download | kernel-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.c | 2 |
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) |