diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2016-03-01 13:07:13 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2016-03-01 16:06:42 -0500 |
commit | 8bd5ba86d9ba7169e137fc4f32c553080c056a02 (patch) | |
tree | 09463b98f411458f698ac72c51747e3c7fec51d4 /include/linux/sunrpc | |
parent | ec705fd4d09be5c76178d8ac875cb4a8e91558a5 (diff) |
svcrdma: Use new CQ API for RPC-over-RDMA server receive CQs
Calling ib_poll_cq() to sort through WCs during a completion is a
common pattern amongst RDMA consumers. Since commit 14d3a3b2498e
("IB: add a proper completion queue abstraction"), WC sorting can
be handled by the IB core.
By converting to this new API, svcrdma is made a better neighbor to
other RDMA consumers, as it allows the core to schedule the delivery
of completions more fairly amongst all active consumers.
Because each ib_cqe carries a pointer to a completion method, the
core can now post operations on a consumer's QP, and handle the
completions itself.
svcrdma receive completions no longer use the dto_tasklet. Each
polled Receive WC is now handled individually in soft IRQ context.
The server transport's rdma_stat_rq_poll and rdma_stat_rq_prod
metrics are no longer updated.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'include/linux/sunrpc')
-rw-r--r-- | include/linux/sunrpc/svc_rdma.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h index c2b0d95602d8..cf79ab86d3d4 100644 --- a/include/linux/sunrpc/svc_rdma.h +++ b/include/linux/sunrpc/svc_rdma.h | |||
@@ -75,6 +75,7 @@ struct svc_rdma_op_ctxt { | |||
75 | struct svc_rdma_fastreg_mr *frmr; | 75 | struct svc_rdma_fastreg_mr *frmr; |
76 | int hdr_count; | 76 | int hdr_count; |
77 | struct xdr_buf arg; | 77 | struct xdr_buf arg; |
78 | struct ib_cqe cqe; | ||
78 | struct list_head dto_q; | 79 | struct list_head dto_q; |
79 | enum ib_wr_opcode wr_op; | 80 | enum ib_wr_opcode wr_op; |
80 | enum ib_wc_status wc_status; | 81 | enum ib_wc_status wc_status; |
@@ -174,7 +175,6 @@ struct svcxprt_rdma { | |||
174 | struct work_struct sc_work; | 175 | struct work_struct sc_work; |
175 | }; | 176 | }; |
176 | /* sc_flags */ | 177 | /* sc_flags */ |
177 | #define RDMAXPRT_RQ_PENDING 1 | ||
178 | #define RDMAXPRT_SQ_PENDING 2 | 178 | #define RDMAXPRT_SQ_PENDING 2 |
179 | #define RDMAXPRT_CONN_PENDING 3 | 179 | #define RDMAXPRT_CONN_PENDING 3 |
180 | 180 | ||