|
|
@@ -270,9 +270,14 @@ static void handle_connect_req(struct rdma_cm_id *new_cma_id,
|
|
|
/* Save client advertised inbound read limit for use later in accept. */
|
|
|
newxprt->sc_ord = param->initiator_depth;
|
|
|
|
|
|
- /* Set the local and remote addresses in the transport */
|
|
|
sa = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.dst_addr;
|
|
|
svc_xprt_set_remote(&newxprt->sc_xprt, sa, svc_addr_len(sa));
|
|
|
+ /* The remote port is arbitrary and not under the control of the
|
|
|
+ * client ULP. Set it to a fixed value so that the DRC continues
|
|
|
+ * to be effective after a reconnect.
|
|
|
+ */
|
|
|
+ rpc_set_port((struct sockaddr *)&newxprt->sc_xprt.xpt_remote, 0);
|
|
|
+
|
|
|
sa = (struct sockaddr *)&newxprt->sc_cm_id->route.addr.src_addr;
|
|
|
svc_xprt_set_local(&newxprt->sc_xprt, sa, svc_addr_len(sa));
|
|
|
|