|
|
@@ -554,6 +554,7 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
|
|
|
ep->rep_attr.recv_cq = recvcq;
|
|
|
|
|
|
/* Initialize cma parameters */
|
|
|
+ memset(&ep->rep_remote_cma, 0, sizeof(ep->rep_remote_cma));
|
|
|
|
|
|
/* RPC/RDMA does not use private data */
|
|
|
ep->rep_remote_cma.private_data = NULL;
|
|
|
@@ -567,7 +568,16 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
|
|
|
ep->rep_remote_cma.responder_resources =
|
|
|
ia->ri_device->attrs.max_qp_rd_atom;
|
|
|
|
|
|
- ep->rep_remote_cma.retry_count = 7;
|
|
|
+ /* Limit transport retries so client can detect server
|
|
|
+ * GID changes quickly. RPC layer handles re-establishing
|
|
|
+ * transport connection and retransmission.
|
|
|
+ */
|
|
|
+ ep->rep_remote_cma.retry_count = 6;
|
|
|
+
|
|
|
+ /* RPC-over-RDMA handles its own flow control. In addition,
|
|
|
+ * make all RNR NAKs visible so we know that RPC-over-RDMA
|
|
|
+ * flow control is working correctly (no NAKs should be seen).
|
|
|
+ */
|
|
|
ep->rep_remote_cma.flow_control = 0;
|
|
|
ep->rep_remote_cma.rnr_retry_count = 0;
|
|
|
|