Skip to contentSkip to conversation

RDMA/nes: abnormal listener termination causes loopback node crash

PATCH In review Faisal Latif 4 participants 4 messages Dec 9, 2009 – Dec 10, 2009 1 message not in the archive InfiniBand

lore
Share & tools
lore
#0 lore raw

PATCH 6/11 RDMA/nes: abnormal listener termination causes loopback node crash

when listener is destroyed for loopback connection, listener node is getting reset event. This causes crash as listener is not expecting reset event. Code review of cm_event_reset() durring debugging showed the cm_id ref count in incrementing after calling its event handler and not before.

---
 drivers/infiniband/hw/nes/nes_cm.c |   16 +++-------------
 1 files changed, 3 insertions(+), 13 deletions(-)
drivers/infiniband/hw/nes/nes_cm.c +3 -13
index ec04786..20e21f1 100644
@@ -1014,18 +1014,6 @@ static int mini_cm_dec_refcnt_listen(struct nes_cm_core *cm_core,
 					cm_node->state = NES_CM_STATE_LISTENER_DESTROYED;
 					loopback->state = NES_CM_STATE_CLOSED;
 
-					event.cm_node = cm_node;
-					event.cm_info.rem_addr =
-							 cm_node->rem_addr;
-					event.cm_info.loc_addr =
-							 cm_node->loc_addr;
-					event.cm_info.rem_port =
-							 cm_node->rem_port;
-					event.cm_info.loc_port =
-							 cm_node->loc_port;
-					event.cm_info.cm_id = cm_node->cm_id;
-					cm_event_reset(&event);
-
 					rem_ref_cm_node(cm_node->cm_core,
 							 cm_node);
 
@@ -3440,6 +3428,8 @@ static void cm_event_reset(struct nes_cm_event *event)
 
 	nes_debug(NES_DBG_CM, "%p - cm_id = %p\n", event->cm_node, cm_id);
 	nesqp = cm_id->provider_data;
+	if (!nesqp)
+		return;
 
 	nesqp->cm_id = NULL;
 	/* cm_id->provider_data = NULL; */
@@ -3451,8 +3441,8 @@ static void cm_event_reset(struct nes_cm_event *event)
 	cm_event.private_data = NULL;
 	cm_event.private_data_len = 0;
 
-	ret = cm_id->event_handler(cm_id, &cm_event);
 	cm_id->add_ref(cm_id);
+	ret = cm_id->event_handler(cm_id, &cm_event);
 	atomic_inc(&cm_closes);
 	cm_event.event = IW_CM_EVENT_CLOSE;
 	cm_event.status = IW_CM_EVENT_STATUS_OK;
Signature · 6 lines
1.5.3.3

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#1 lore raw
Quoted 1 line · Faisal Latif

when listener is destroyed for loopback connection

Does the upstream iwarp stack supports loopback connections? does it apply to all vendors?

Or.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

A message that is not in the archive (sent off-list or not yet received): 4B20A00C.1070607-smomgflXvOZWk0Htik3J/[email protected]

#3 lore raw
Quoted 4 lines
Quoted 1 line · Faisal Latif

when listener is destroyed for loopback connection

Does the upstream iwarp stack supports loopback connections?

Yes.

Quoted 1 line

does it apply to all vendors?

Yes but Chelsio handles loopback differently from Intel/NetEffect.

This topic came up before, see:

http://lists.openfabrics.org/pipermail/general/2009-July/060542.html

http://lists.openfabrics.org/pipermail/general/2009-July/060548.html

Chien
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#4 lore raw
In reply to a message not in the archive
Quoted 5 lines · Or Gerlitz
Quoted 1 line · Faisal Latif

when listener is destroyed for loopback connection

Does the upstream iwarp stack supports loopback connections? does it apply to all vendors?

Or.

Loopback support is provider-specific. There is no software iwarp loopback, if that's what your asking. But the upstream core code doesn't prohibit providers from supporting hw-loopback connections.

Steve.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html