On 16:54 Thu 05 Mar     , Eli Dorfman (Voltaire) wrote:
> 
> 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.

I agree with an issue raising, but not fully agree with proposed fix.
See below.

> 
> Signed-off-by: Eli Dorfman <[email protected]>
> ---
>  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 (!smport) {
> +             OSM_LOG(sm->p_log, OSM_LOG_ERROR,
> +                     "ERR 1106: cannot find master 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.base_lid;

Normally port_info field of osm_physp structure stores PortInfo as it was
last time received from the network. And we should to avoid "fixing" it
this way. It could be not correct - we cannot know what master SM will
really do.

Instead of touching port_info I would suggest to setup destination lid
using smport which you already have:

        madw->mad_addr.dest_lid = smport->p_physp->port_info.base_lid;

Sasha
_______________________________________________
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