linux/net/sunrpc/xprtrdma
Chuck Lever 9590d083c1 xprtrdma: Use xprt_pin_rqst in rpcrdma_reply_handler
Adopt the use of xprt_pin_rqst to eliminate contention between
Call-side users of rb_lock and the use of rb_lock in
rpcrdma_reply_handler.

This replaces the mechanism introduced in 431af645cf ("xprtrdma:
Fix client lock-up after application signal fires").

Use recv_lock to quickly find the completing rqst, pin it, then
drop the lock. At that point invalidation and pull-up of the Reply
XDR can be done. Both are often expensive operations.

Finally, take recv_lock again to signal completion to the RPC
layer. It also protects adjustment of "cwnd".

This greatly reduces the amount of time a lock is held by the
reply handler. Comparing lock_stat results shows a marked decrease
in contention on rb_lock and recv_lock.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
[trond.myklebust@primarydata.com: Remove call to rpcrdma_buffer_put() from
   the "out_norqst:" path in rpcrdma_reply_handler.]
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
2017-09-05 18:27:07 -04:00
..
backchannel.c xprtrdma: Clean up rpcrdma_bc_marshal_reply() 2017-08-11 13:20:08 -04:00
fmr_ops.c xprtrdma: Remove imul instructions from chunk list encoders 2017-08-15 14:01:50 -04:00
frwr_ops.c xprtrdma: Remove imul instructions from chunk list encoders 2017-08-15 14:01:50 -04:00
Makefile svcrdma: Remove svc_rdma_marshal.c 2017-06-28 14:21:43 -04:00
module.c rpcrdma: Merge svcrdma and xprtrdma modules into one 2015-06-04 16:56:02 -04:00
rpc_rdma.c xprtrdma: Use xprt_pin_rqst in rpcrdma_reply_handler 2017-09-05 18:27:07 -04:00
svc_rdma_backchannel.c NFS-over-RDMA client updates for Linux 4.14 2017-09-05 15:16:04 -04:00
svc_rdma_recvfrom.c svcrdma: Properly compute .len and .buflen for received RPC Calls 2017-07-12 15:54:57 -04:00
svc_rdma_rw.c svcrdma: Remove svc_rdma_chunk_ctxt::cc_dir field 2017-07-12 15:55:00 -04:00
svc_rdma_sendto.c svcrdma: fix an incorrect check on -E2BIG and -EINVAL 2017-07-13 14:18:47 -04:00
svc_rdma_transport.c svcrdma: Clean up after converting svc_rdma_recvfrom to rdma_rw API 2017-07-12 15:54:59 -04:00
svc_rdma.c svcrdma: Reduce size of sge array in struct svc_rdma_op_ctxt 2017-04-25 17:25:55 -04:00
transport.c xprtrdma: Use xprt_pin_rqst in rpcrdma_reply_handler 2017-09-05 18:27:07 -04:00
verbs.c xprtrdma: Use xprt_pin_rqst in rpcrdma_reply_handler 2017-09-05 18:27:07 -04:00
xprt_rdma.h xprtrdma: Use xprt_pin_rqst in rpcrdma_reply_handler 2017-09-05 18:27:07 -04:00