[ofa-general] RE: [PATCH] CMA: Notify ULP when CM exits the TIMEWAIT state.

Sean Hefty sean.hefty at intel.com
Tue Jul 15 11:32:25 PDT 2008


from: Signed-off-by: Amir Vadai <amirv at mellanox.co.il>

Applications 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 at mellanox.co.il>
Acked-by: Sean Hefty <sean.hefty at intel.com>
---

Roland, this obviously isn't critical, but it would be nice to get into 2.6.27
if possible, to include it in the next release of the librdmacm.

> drivers/infiniband/core/cma.c |    7 ++++++-
> include/rdma/rdma_cm.h        |    3 ++-
> 2 files changed, 8 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
>index ae11d5c..9fa1371 100644
>--- a/drivers/infiniband/core/cma.c
>+++ b/drivers/infiniband/core/cma.c
>@@ -914,7 +914,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);
>@@ -950,6 +953,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_TIMWAIT_EXIT;
>+		break;
> 	case IB_CM_MRA_RECEIVED:
> 		/* ignore event */
> 		goto out;
>diff --git a/include/rdma/rdma_cm.h b/include/rdma/rdma_cm.h
>index 22bb2e7..80170bd 100644
>--- a/include/rdma/rdma_cm.h
>+++ b/include/rdma/rdma_cm.h
>@@ -57,7 +57,8 @@ enum rdma_cm_event_type {
> 	RDMA_CM_EVENT_DISCONNECTED,
> 	RDMA_CM_EVENT_DEVICE_REMOVAL,
> 	RDMA_CM_EVENT_MULTICAST_JOIN,
>-	RDMA_CM_EVENT_MULTICAST_ERROR
>+	RDMA_CM_EVENT_MULTICAST_ERROR,
>+	RDMA_CM_EVENT_TIMWAIT_EXIT
> };
>
> enum rdma_port_space {
>--
>1.5.3





More information about the general mailing list