Sasha,

The following patch (attached this time:-) removes the SM from the sm_guid_table when IsSM is not present. Compile tested only as I don't have an environment to recreate this anymore.

-- Hal
opensm/osm_port_info_rcv.c: Remove SM from sm_guid_tbl when IsSM is 
not present in PortInfo:CapabilityMask

SM should be removed from the sm_guid_tbl subsequent to a trap 144
indicating the capability mask changed (and the new capabilities
no longer include IsSM).

As a result of this, move clearing of SM state to be conditionalized on 
IsSM present rather than regardless of whether IsSM is set

Prior to this patch, the OpenSM log is spammed with error messages on
SubnGets of SMInfo attribute.

Signed-off-by: Hal Rosenstock <[EMAIL PROTECTED]>

diff --git a/opensm/opensm/osm_port_info_rcv.c 
b/opensm/opensm/osm_port_info_rcv.c
index 47eb457..97ec5b3 100644
--- a/opensm/opensm/osm_port_info_rcv.c
+++ b/opensm/opensm/osm_port_info_rcv.c
@@ -149,17 +149,17 @@ __osm_pi_rcv_process_endport(IN osm_sm_t * sm,
                         */
                        __osm_pi_rcv_set_sm(sm, p_physp);
        } else {
-               /*
-                  Before querying the SM - we want to make sure we clean its 
state, so
-                  if the querying fails we recognize that this SM is not 
active.
-                */
                p_sm_tbl = &sm->p_subn->sm_guid_tbl;
-               p_sm = (osm_remote_sm_t *) cl_qmap_get(p_sm_tbl, port_guid);
-               if (p_sm != (osm_remote_sm_t *) cl_qmap_end(p_sm_tbl))
-                       /* clean it up */
-                       p_sm->smi.pri_state = 0xF0 & p_sm->smi.pri_state;
-
                if (p_pi->capability_mask & IB_PORT_CAP_IS_SM) {
+                       /*
+                        * Before querying the SM - we want to make sure we
+                        * clean its state, so if the querying fails we
+                        * recognize that this SM is not active.
+                        */
+                       p_sm = (osm_remote_sm_t *) cl_qmap_get(p_sm_tbl, 
port_guid);
+                       if (p_sm != (osm_remote_sm_t *) cl_qmap_end(p_sm_tbl))
+                               /* clean it up */
+                               p_sm->smi.pri_state = 0xF0 & 
p_sm->smi.pri_state;
                        if (sm->p_subn->opt.ignore_other_sm)
                                OSM_LOG(sm->p_log, OSM_LOG_VERBOSE,
                                        "Ignoring SM on port 0x%" PRIx64 "\n",
@@ -171,7 +171,8 @@ __osm_pi_rcv_process_endport(IN osm_sm_t * sm,
                                        cl_ntoh64(port_guid));
 
                                /*
-                                  This port indicates it's an SM and it's not 
our own port.
+                                  This port indicates it's an SM and
+                                  it's not our own port.
                                   Acquire the SMInfo Attribute.
                                 */
                                memset(&context, 0, sizeof(context));
@@ -190,7 +191,8 @@ __osm_pi_rcv_process_endport(IN osm_sm_t * sm,
                                                "Failure requesting SMInfo 
(%s)\n",
                                                ib_get_err_str(status));
                        }
-               }
+               } else
+                       cl_qmap_remove(p_sm_tbl, port_guid);
        }
 
        OSM_LOG_EXIT(sm->p_log);
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to