RDMA/i40iw: Fix refused connections
Make sure cm_node is setup before sending SYN packet and ORD/IRD negotiation. Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
23ef48ad6c
commit
b3437e0d5a
@ -2852,7 +2852,6 @@ static struct i40iw_cm_node *i40iw_create_cm_node(
|
||||
void *private_data,
|
||||
struct i40iw_cm_info *cm_info)
|
||||
{
|
||||
int ret;
|
||||
struct i40iw_cm_node *cm_node;
|
||||
struct i40iw_cm_listener *loopback_remotelistener;
|
||||
struct i40iw_cm_node *loopback_remotenode;
|
||||
@ -2922,29 +2921,6 @@ static struct i40iw_cm_node *i40iw_create_cm_node(
|
||||
memcpy(cm_node->pdata_buf, private_data, private_data_len);
|
||||
|
||||
cm_node->state = I40IW_CM_STATE_SYN_SENT;
|
||||
ret = i40iw_send_syn(cm_node, 0);
|
||||
|
||||
if (ret) {
|
||||
if (cm_node->ipv4)
|
||||
i40iw_debug(cm_node->dev,
|
||||
I40IW_DEBUG_CM,
|
||||
"Api - connect() FAILED: dest addr=%pI4",
|
||||
cm_node->rem_addr);
|
||||
else
|
||||
i40iw_debug(cm_node->dev, I40IW_DEBUG_CM,
|
||||
"Api - connect() FAILED: dest addr=%pI6",
|
||||
cm_node->rem_addr);
|
||||
i40iw_rem_ref_cm_node(cm_node);
|
||||
cm_node = NULL;
|
||||
}
|
||||
|
||||
if (cm_node)
|
||||
i40iw_debug(cm_node->dev,
|
||||
I40IW_DEBUG_CM,
|
||||
"Api - connect(): port=0x%04x, cm_node=%p, cm_id = %p.\n",
|
||||
cm_node->rem_port,
|
||||
cm_node,
|
||||
cm_node->cm_id);
|
||||
|
||||
return cm_node;
|
||||
}
|
||||
@ -3828,23 +3804,8 @@ int i40iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
|
||||
conn_param->private_data_len,
|
||||
(void *)conn_param->private_data,
|
||||
&cm_info);
|
||||
if (!cm_node) {
|
||||
i40iw_manage_qhash(iwdev,
|
||||
&cm_info,
|
||||
I40IW_QHASH_TYPE_TCP_ESTABLISHED,
|
||||
I40IW_QHASH_MANAGE_TYPE_DELETE,
|
||||
NULL,
|
||||
false);
|
||||
|
||||
if (apbvt_set && !i40iw_listen_port_in_use(&iwdev->cm_core,
|
||||
cm_info.loc_port))
|
||||
i40iw_manage_apbvt(iwdev,
|
||||
cm_info.loc_port,
|
||||
I40IW_MANAGE_APBVT_DEL);
|
||||
cm_id->rem_ref(cm_id);
|
||||
iwdev->cm_core.stats_connect_errs++;
|
||||
return -ENOMEM;
|
||||
}
|
||||
if (!cm_node)
|
||||
goto err;
|
||||
|
||||
i40iw_record_ird_ord(cm_node, (u16)conn_param->ird, (u16)conn_param->ord);
|
||||
if (cm_node->send_rdma0_op == SEND_RDMA_READ_ZERO &&
|
||||
@ -3857,7 +3818,49 @@ int i40iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
|
||||
cm_node->iwqp = iwqp;
|
||||
iwqp->cm_id = cm_id;
|
||||
i40iw_add_ref(&iwqp->ibqp);
|
||||
|
||||
if (cm_node->state == I40IW_CM_STATE_SYN_SENT) {
|
||||
if (i40iw_send_syn(cm_node, 0)) {
|
||||
i40iw_rem_ref_cm_node(cm_node);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
i40iw_debug(cm_node->dev,
|
||||
I40IW_DEBUG_CM,
|
||||
"Api - connect(): port=0x%04x, cm_node=%p, cm_id = %p.\n",
|
||||
cm_node->rem_port,
|
||||
cm_node,
|
||||
cm_node->cm_id);
|
||||
return 0;
|
||||
|
||||
err:
|
||||
if (cm_node) {
|
||||
if (cm_node->ipv4)
|
||||
i40iw_debug(cm_node->dev,
|
||||
I40IW_DEBUG_CM,
|
||||
"Api - connect() FAILED: dest addr=%pI4",
|
||||
cm_node->rem_addr);
|
||||
else
|
||||
i40iw_debug(cm_node->dev, I40IW_DEBUG_CM,
|
||||
"Api - connect() FAILED: dest addr=%pI6",
|
||||
cm_node->rem_addr);
|
||||
}
|
||||
i40iw_manage_qhash(iwdev,
|
||||
&cm_info,
|
||||
I40IW_QHASH_TYPE_TCP_ESTABLISHED,
|
||||
I40IW_QHASH_MANAGE_TYPE_DELETE,
|
||||
NULL,
|
||||
false);
|
||||
|
||||
if (apbvt_set && !i40iw_listen_port_in_use(&iwdev->cm_core,
|
||||
cm_info.loc_port))
|
||||
i40iw_manage_apbvt(iwdev,
|
||||
cm_info.loc_port,
|
||||
I40IW_MANAGE_APBVT_DEL);
|
||||
cm_id->rem_ref(cm_id);
|
||||
iwdev->cm_core.stats_connect_errs++;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user