RDMA/cma: Add RDMA_CM_EVENT_TIMEWAIT_EXIT event
Consumers that want to re-use their QPs in new connections need to know when the QP has exited the timewait state. Report the timewait event through the rdma_cm. Signed-off-by: Amir Vadai <amirv@mellanox.co.il> Acked-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
Родитель
dd5bdff83b
Коммит
38ca83a588
|
@ -920,7 +920,10 @@ static int cma_ib_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event)
|
|||
struct rdma_cm_event event;
|
||||
int ret = 0;
|
||||
|
||||
if (cma_disable_callback(id_priv, CMA_CONNECT))
|
||||
if ((ib_event->event != IB_CM_TIMEWAIT_EXIT &&
|
||||
cma_disable_callback(id_priv, CMA_CONNECT)) ||
|
||||
(ib_event->event == IB_CM_TIMEWAIT_EXIT &&
|
||||
cma_disable_callback(id_priv, CMA_DISCONNECT)))
|
||||
return 0;
|
||||
|
||||
memset(&event, 0, sizeof event);
|
||||
|
@ -956,6 +959,8 @@ static int cma_ib_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event)
|
|||
event.event = RDMA_CM_EVENT_DISCONNECTED;
|
||||
break;
|
||||
case IB_CM_TIMEWAIT_EXIT:
|
||||
event.event = RDMA_CM_EVENT_TIMEWAIT_EXIT;
|
||||
break;
|
||||
case IB_CM_MRA_RECEIVED:
|
||||
/* ignore event */
|
||||
goto out;
|
||||
|
|
|
@ -58,7 +58,8 @@ enum rdma_cm_event_type {
|
|||
RDMA_CM_EVENT_DEVICE_REMOVAL,
|
||||
RDMA_CM_EVENT_MULTICAST_JOIN,
|
||||
RDMA_CM_EVENT_MULTICAST_ERROR,
|
||||
RDMA_CM_EVENT_ADDR_CHANGE
|
||||
RDMA_CM_EVENT_ADDR_CHANGE,
|
||||
RDMA_CM_EVENT_TIMEWAIT_EXIT
|
||||
};
|
||||
|
||||
enum rdma_port_space {
|
||||
|
|
Загрузка…
Ссылка в новой задаче