linux/net/sunrpc/xprtrdma
Chuck Lever 2fad659209 xprtrdma: Wait on empty sendctx queue
Currently, when the sendctx queue is exhausted during marshaling, the
RPC/RDMA transport places the RPC task on the delayq, which forces a
wait for HZ >> 2 before the marshal and send is retried.

With this change, the transport now places such an RPC task on the
pending queue, and wakes it just as soon as more sendctxs become
available. This typically takes less than a millisecond, and the
write_space waking mechanism is less deadlock-prone.

Moreover, the waiting RPC task is holding the transport's write
lock, which blocks the transport from sending RPCs. Therefore faster
recovery from sendctx queue exhaustion is desirable.

Cf. commit 5804891455d5 ("xprtrdma: ->send_request returns -EAGAIN
when there are no free MRs").

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
2018-06-01 13:56:30 -04:00
..
backchannel.c xprtrdma: Move Receive posting to Receive handler 2018-05-07 09:20:04 -04:00
fmr_ops.c xprtrdma: Fix max_send_wr computation 2018-05-07 09:20:03 -04:00
frwr_ops.c xprtrdma: Fix max_send_wr computation 2018-05-07 09:20:03 -04:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
module.c xprtrdma: Add proper SPDX tags for NetApp-contributed source 2018-05-07 09:20:03 -04:00
rpc_rdma.c xprtrdma: Wait on empty sendctx queue 2018-06-01 13:56:30 -04:00
svc_rdma_backchannel.c SUNRPC: Add a ->free_slot transport callout 2018-05-07 09:20:03 -04:00
svc_rdma_recvfrom.c svcrdma: Clean up rdma_build_arg_xdr 2018-03-20 17:32:13 -04:00
svc_rdma_rw.c svcrdma: Fix Read chunk round-up 2018-02-08 13:40:17 -05:00
svc_rdma_sendto.c svcrdma: Post Receives in the Receive completion handler 2018-01-18 11:52:51 -05:00
svc_rdma_transport.c sunrpc: Save remote presentation address in svc_xprt for trace events 2018-04-03 15:08:11 -04:00
svc_rdma.c svcrdma: Consult max_qp_init_rd_atom when accepting connections 2018-03-20 17:32:13 -04:00
transport.c xprtrdma: Move Receive posting to Receive handler 2018-05-07 09:20:04 -04:00
verbs.c xprtrdma: Wait on empty sendctx queue 2018-06-01 13:56:30 -04:00
xprt_rdma.h xprtrdma: Wait on empty sendctx queue 2018-06-01 13:56:30 -04:00