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