RDMA/nes: Fix client side QP destroy

Fix QP not being destroyed properly on the client, which leads to
userspace programs hanging on exit. This is a missing chunk from the
connection management rewrite in commit 6492cdf3 ("RDMA/nes: CM
connection setup/teardown rework").

Signed-off-by: Faisal Latif <flatif@neteffect.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>

authored by Faisal Latif and committed by Roland Dreier d7ffd507 1941246d

+2 -9
+2 -9
drivers/infiniband/hw/nes/nes_cm.c
··· 1956 return ret; 1957 cleanup_retrans_entry(cm_node); 1958 cm_node->state = NES_CM_STATE_CLOSED; 1959 - ret = send_fin(cm_node, NULL); 1960 - 1961 - if (cm_node->accept_pend) { 1962 - BUG_ON(!cm_node->listener); 1963 - atomic_dec(&cm_node->listener->pend_accepts_cnt); 1964 - BUG_ON(atomic_read(&cm_node->listener->pend_accepts_cnt) < 0); 1965 - } 1966 1967 ret = send_reset(cm_node, NULL); 1968 return ret; ··· 2376 atomic_inc(&cm_disconnects); 2377 cm_event.event = IW_CM_EVENT_DISCONNECT; 2378 if (last_ae == NES_AEQE_AEID_LLP_CONNECTION_RESET) { 2379 cm_event.status = IW_CM_EVENT_STATUS_RESET; 2380 nes_debug(NES_DBG_CM, "Generating a CM " 2381 "Disconnect Event (status reset) for " ··· 2502 nes_debug(NES_DBG_CM, "Call close API\n"); 2503 2504 g_cm_core->api->close(g_cm_core, nesqp->cm_node); 2505 - nesqp->cm_node = NULL; 2506 } 2507 2508 return ret; ··· 2830 cm_node->apbvt_set = 1; 2831 nesqp->cm_node = cm_node; 2832 cm_node->nesqp = nesqp; 2833 2834 return 0; 2835 } ··· 3161 if (ret) 3162 printk(KERN_ERR "%s[%u] OFA CM event_handler returned, " 3163 "ret=%d\n", __func__, __LINE__, ret); 3164 - nes_rem_ref(&nesqp->ibqp); 3165 cm_id->rem_ref(cm_id); 3166 3167 rem_ref_cm_node(event->cm_node->cm_core, event->cm_node);
··· 1956 return ret; 1957 cleanup_retrans_entry(cm_node); 1958 cm_node->state = NES_CM_STATE_CLOSED; 1959 1960 ret = send_reset(cm_node, NULL); 1961 return ret; ··· 2383 atomic_inc(&cm_disconnects); 2384 cm_event.event = IW_CM_EVENT_DISCONNECT; 2385 if (last_ae == NES_AEQE_AEID_LLP_CONNECTION_RESET) { 2386 + issued_disconnect_reset = 1; 2387 cm_event.status = IW_CM_EVENT_STATUS_RESET; 2388 nes_debug(NES_DBG_CM, "Generating a CM " 2389 "Disconnect Event (status reset) for " ··· 2508 nes_debug(NES_DBG_CM, "Call close API\n"); 2509 2510 g_cm_core->api->close(g_cm_core, nesqp->cm_node); 2511 } 2512 2513 return ret; ··· 2837 cm_node->apbvt_set = 1; 2838 nesqp->cm_node = cm_node; 2839 cm_node->nesqp = nesqp; 2840 + nes_add_ref(&nesqp->ibqp); 2841 2842 return 0; 2843 } ··· 3167 if (ret) 3168 printk(KERN_ERR "%s[%u] OFA CM event_handler returned, " 3169 "ret=%d\n", __func__, __LINE__, ret); 3170 cm_id->rem_ref(cm_id); 3171 3172 rem_ref_cm_node(event->cm_node->cm_core, event->cm_node);