[ofa-general] ***SPAM*** [PATCH] fix local port smlid

Eli Dorfman (Voltaire) dorfman.eli at gmail.com
Thu Mar 5 04:59:44 PST 2009


fix local port smlid

when opensm goes from master to standby due to handover its local
port smlid will be wrong (equal to its own lid).
the new master opensm will change smlid only after local sm
(previous master) is in standby and will not query its port again.

Signed-off-by: Eli Dorfman <elid at voltaire.com>
---
 opensm/opensm/osm_req.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/opensm/opensm/osm_req.c b/opensm/opensm/osm_req.c
index 0865ce5..df138d7 100644
--- a/opensm/opensm/osm_req.c
+++ b/opensm/opensm/osm_req.c
@@ -217,6 +217,7 @@ int osm_send_trap144(osm_sm_t *sm, ib_net16_t local)
 	ib_smp_t *smp;
 	ib_mad_notice_attr_t *ntc;
 	osm_port_t *port;
+	osm_port_t *smport;
 	ib_port_info_t *pi;
 
 	port = osm_get_port_by_guid(sm->p_subn, sm->p_subn->sm_port_guid);
@@ -229,6 +230,20 @@ int osm_send_trap144(osm_sm_t *sm, ib_net16_t local)
 
 	pi = &port->p_physp->port_info;
 
+	smport = osm_get_port_by_guid(sm->p_subn, sm->master_sm_guid);
+	if (!port) {
+		OSM_LOG(sm->p_log, OSM_LOG_ERROR,
+			"ERR 1104: cannot find SM port by guid 0x%" PRIx64 "\n",
+			cl_ntoh64(sm->master_sm_guid));
+		return -1;
+	}
+
+	/* update local port's smlid - since we may have */
+	/* wrong value in local portinfo */
+	/* this may happen when we move to standby and master updates */
+	/* out smlid but we will not query it */
+	pi->master_sm_base_lid = smport->p_physp->port_info.master_sm_base_lid;
+
 	/* don't bother with sending trap when SMA supports this */
 	if (!local &&
 	    pi->capability_mask&(IB_PORT_CAP_HAS_TRAP|IB_PORT_CAP_HAS_CAP_NTC))
-- 
1.5.5




More information about the general mailing list