]> git.baikalelectronics.ru Git - kernel.git/commit
xprtrdma: Wait on empty sendctx queue
authorChuck Lever <chuck.lever@oracle.com>
Fri, 4 May 2018 19:35:57 +0000 (15:35 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Fri, 1 Jun 2018 17:56:30 +0000 (13:56 -0400)
commit2dd2419d6befbbef2b1539d2f2e10af49fa81bc3
treecc0cdc1adb78753269485d4754f5182d989ef5c6
parent47705647dc99e6c31d90b6c779ee3721e88bb6d4
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>
net/sunrpc/xprtrdma/rpc_rdma.c
net/sunrpc/xprtrdma/verbs.c
net/sunrpc/xprtrdma/xprt_rdma.h