aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/hw/nes/nes_cm.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c
index 20e21f1a18b9..a25816812ced 100644
--- a/drivers/infiniband/hw/nes/nes_cm.c
+++ b/drivers/infiniband/hw/nes/nes_cm.c
@@ -1610,6 +1610,7 @@ static void handle_syn_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1610 break; 1610 break;
1611 case NES_CM_STATE_CLOSED: 1611 case NES_CM_STATE_CLOSED:
1612 cleanup_retrans_entry(cm_node); 1612 cleanup_retrans_entry(cm_node);
1613 add_ref_cm_node(cm_node);
1613 send_reset(cm_node, skb); 1614 send_reset(cm_node, skb);
1614 break; 1615 break;
1615 case NES_CM_STATE_TSA: 1616 case NES_CM_STATE_TSA:
@@ -1661,9 +1662,15 @@ static void handle_synack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1661 passive_open_err(cm_node, skb, 1); 1662 passive_open_err(cm_node, skb, 1);
1662 break; 1663 break;
1663 case NES_CM_STATE_LISTENING: 1664 case NES_CM_STATE_LISTENING:
1665 cm_node->tcp_cntxt.loc_seq_num = ntohl(tcph->ack_seq);
1666 cleanup_retrans_entry(cm_node);
1667 cm_node->state = NES_CM_STATE_CLOSED;
1668 send_reset(cm_node, skb);
1669 break;
1664 case NES_CM_STATE_CLOSED: 1670 case NES_CM_STATE_CLOSED:
1665 cm_node->tcp_cntxt.loc_seq_num = ntohl(tcph->ack_seq); 1671 cm_node->tcp_cntxt.loc_seq_num = ntohl(tcph->ack_seq);
1666 cleanup_retrans_entry(cm_node); 1672 cleanup_retrans_entry(cm_node);
1673 add_ref_cm_node(cm_node);
1667 send_reset(cm_node, skb); 1674 send_reset(cm_node, skb);
1668 break; 1675 break;
1669 case NES_CM_STATE_ESTABLISHED: 1676 case NES_CM_STATE_ESTABLISHED:
@@ -1732,8 +1739,13 @@ static int handle_ack_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb,
1732 dev_kfree_skb_any(skb); 1739 dev_kfree_skb_any(skb);
1733 break; 1740 break;
1734 case NES_CM_STATE_LISTENING: 1741 case NES_CM_STATE_LISTENING:
1742 cleanup_retrans_entry(cm_node);
1743 cm_node->state = NES_CM_STATE_CLOSED;
1744 send_reset(cm_node, skb);
1745 break;
1735 case NES_CM_STATE_CLOSED: 1746 case NES_CM_STATE_CLOSED:
1736 cleanup_retrans_entry(cm_node); 1747 cleanup_retrans_entry(cm_node);
1748 add_ref_cm_node(cm_node);
1737 send_reset(cm_node, skb); 1749 send_reset(cm_node, skb);
1738 break; 1750 break;
1739 case NES_CM_STATE_LAST_ACK: 1751 case NES_CM_STATE_LAST_ACK:
@@ -2193,8 +2205,11 @@ static int mini_cm_close(struct nes_cm_core *cm_core, struct nes_cm_node *cm_nod
2193 case NES_CM_STATE_CLOSING: 2205 case NES_CM_STATE_CLOSING:
2194 ret = -1; 2206 ret = -1;
2195 break; 2207 break;
2196 case NES_CM_STATE_MPAREJ_RCVD:
2197 case NES_CM_STATE_LISTENING: 2208 case NES_CM_STATE_LISTENING:
2209 cleanup_retrans_entry(cm_node);
2210 send_reset(cm_node, NULL);
2211 break;
2212 case NES_CM_STATE_MPAREJ_RCVD:
2198 case NES_CM_STATE_UNKNOWN: 2213 case NES_CM_STATE_UNKNOWN:
2199 case NES_CM_STATE_INITED: 2214 case NES_CM_STATE_INITED:
2200 case NES_CM_STATE_CLOSED: 2215 case NES_CM_STATE_CLOSED: