aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorFaisal Latif <faisal.latif@intel.com>2009-12-09 18:54:32 -0500
committerRoland Dreier <rolandd@cisco.com>2009-12-09 18:54:32 -0500
commitb1190d3e0d548615ee7c38c10b5fc376a76b7afd (patch)
tree7700d2039a4791d95b8f620ecada9796dd87ffcd /drivers/infiniband
parentd2fa9b26e181d1e3c3df06a57fa13b04afee0e16 (diff)
RDMA/nes: FIN during MPA startup causes timeout
A FIN that is received during an MPA start up sequence causes a timeout in iwcm.c. The connection has not been completely closed so the iwcm code is waiting for resources to be cleaned up. This closes the connection so everything cleans up correctly. Signed-off-by: Don Wood <donald.e.wood@intel.com> Signed-off-by: Faisal Latif <faisal.latif@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/hw/nes/nes_cm.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
index b139806a9667..4acf04a03e1c 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -1354,13 +1354,20 @@ static void handle_fin_pkt(struct nes_cm_node *cm_node)
1354 case NES_CM_STATE_SYN_RCVD: 1354 case NES_CM_STATE_SYN_RCVD:
1355 case NES_CM_STATE_SYN_SENT: 1355 case NES_CM_STATE_SYN_SENT:
1356 case NES_CM_STATE_ESTABLISHED: 1356 case NES_CM_STATE_ESTABLISHED:
1357 case NES_CM_STATE_MPAREQ_SENT:
1358 case NES_CM_STATE_MPAREJ_RCVD: 1357 case NES_CM_STATE_MPAREJ_RCVD:
1359 cm_node->tcp_cntxt.rcv_nxt++; 1358 cm_node->tcp_cntxt.rcv_nxt++;
1360 cleanup_retrans_entry(cm_node); 1359 cleanup_retrans_entry(cm_node);
1361 cm_node->state = NES_CM_STATE_LAST_ACK; 1360 cm_node->state = NES_CM_STATE_LAST_ACK;
1362 send_fin(cm_node, NULL); 1361 send_fin(cm_node, NULL);
1363 break; 1362 break;
1363 case NES_CM_STATE_MPAREQ_SENT:
1364 create_event(cm_node, NES_CM_EVENT_ABORTED);
1365 cm_node->tcp_cntxt.rcv_nxt++;
1366 cleanup_retrans_entry(cm_node);
1367 cm_node->state = NES_CM_STATE_CLOSED;
1368 add_ref_cm_node(cm_node);
1369 send_reset(cm_node, NULL);
1370 break;
1364 case NES_CM_STATE_FIN_WAIT1: 1371 case NES_CM_STATE_FIN_WAIT1:
1365 cm_node->tcp_cntxt.rcv_nxt++; 1372 cm_node->tcp_cntxt.rcv_nxt++;
1366 cleanup_retrans_entry(cm_node); 1373 cleanup_retrans_entry(cm_node);