diff options
author | Chuck Lever | 2015-10-24 23:27:10 +0200 |
---|---|---|
committer | Anna Schumaker | 2015-11-02 19:45:15 +0100 |
commit | fe97b47cd623ebbaa55a163c336abc47153526d1 (patch) | |
tree | d936169799d99d924f92b385d1af31d62d083b90 /net/sunrpc/xprtrdma/xprt_rdma.h | |
parent | xprtrdma: Replace send and receive arrays (diff) | |
download | kernel-qcow2-linux-fe97b47cd623ebbaa55a163c336abc47153526d1.tar.gz kernel-qcow2-linux-fe97b47cd623ebbaa55a163c336abc47153526d1.tar.xz kernel-qcow2-linux-fe97b47cd623ebbaa55a163c336abc47153526d1.zip |
xprtrdma: Use workqueue to process RPC/RDMA replies
The reply tasklet is fast, but it's single threaded. After reply
traffic saturates a single CPU, there's no more reply processing
capacity.
Replace the tasklet with a workqueue to spread reply handling across
all CPUs. This also moves RPC/RDMA reply handling out of the soft
IRQ context and into a context that allows sleeps.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Sagi Grimberg <sagig@mellanox.com>
Tested-By: Devesh Sharma <devesh.sharma@avagotech.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'net/sunrpc/xprtrdma/xprt_rdma.h')
-rw-r--r-- | net/sunrpc/xprtrdma/xprt_rdma.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/sunrpc/xprtrdma/xprt_rdma.h b/net/sunrpc/xprtrdma/xprt_rdma.h index e6a358fd1f1d..6ea1dbe46e88 100644 --- a/net/sunrpc/xprtrdma/xprt_rdma.h +++ b/net/sunrpc/xprtrdma/xprt_rdma.h @@ -164,6 +164,7 @@ struct rpcrdma_rep { unsigned int rr_len; struct ib_device *rr_device; struct rpcrdma_xprt *rr_rxprt; + struct work_struct rr_work; struct list_head rr_list; struct rpcrdma_regbuf *rr_rdmabuf; }; @@ -430,6 +431,9 @@ unsigned int rpcrdma_max_segments(struct rpcrdma_xprt *); int frwr_alloc_recovery_wq(void); void frwr_destroy_recovery_wq(void); +int rpcrdma_alloc_wq(void); +void rpcrdma_destroy_wq(void); + /* * Wrappers for chunk registration, shared by read/write chunk code. */ |