IB/cma: Send MRA for reply messages
Current implementation of RDMA_CM sends MRA (Message Receipt Acknowledgment) only for request messages but not for response messages. As a result, a slow active side of the connection may send a ready-to-use message to the passive side in a delay that is too long for the passive side to wait for. This patch adds a call to ib_send_cm_mra() upon receiving a response message and by this tells the other side to modify the service timeout to a bigger value, 16 times than before. As in the request case, MRA for reply will be sent only if a duplicate response has arrived. Signed-off-by: Moni Shoua <monis@mellanox.com> Reviewed-by: Matan Barak <matan@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
e1f24a79f4
commit
61c0ddbe97
@ -1755,6 +1755,9 @@ static int cma_ib_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event)
|
||||
event.status = -ETIMEDOUT;
|
||||
break;
|
||||
case IB_CM_REP_RECEIVED:
|
||||
if (cma_comp(id_priv, RDMA_CM_CONNECT) &&
|
||||
(id_priv->id.qp_type != IB_QPT_UD))
|
||||
ib_send_cm_mra(cm_id, CMA_CM_MRA_SETTING, NULL, 0);
|
||||
if (id_priv->id.qp) {
|
||||
event.status = cma_rep_recv(id_priv);
|
||||
event.event = event.status ? RDMA_CM_EVENT_CONNECT_ERROR :
|
||||
|
Loading…
Reference in New Issue
Block a user