In case when the addr and port is bound, but the rdma_destroy_id is called instead of connection establishment, there is no possibility of binding to this port anymore. Reproduce procedure: 1. cm_id = rdma_create_id( cma_event_handler, cb, ...); 2. rdma_bind_addr(cm_id, (struct sockaddr *)addr); 3. rdma_listen(cm_id, backlog); 4. rdma_destroy_id(cm_id); 5. cm_id = rdma_create_id( cma_event_handler, cb, ...); 6. rdma_bind_addr(cm_id, (struct sockaddr *)addr); //bind unsuccessfull It seems the issue comes from the fact, that in cma_release_port from sys/ofed/drivers/infiniband/core/cma.c a sock_release call has been moved to iw_destroy_cm_id from iwcm.c file. It does work for normal operation, but the function is never reached when no connection is established. (compare rdma_destroy_id function in cma.c)
Navdeep can you have a look at this issue. iw_destroy_cm_id() is your creation?? --HPS
This seems to work fine now on 12.4 RELEASE, 13.2 RELEASE and 14.0 CURRENT Checked with both Intel and Mellanox cards