***SPAM*** Re: [ofa-general] [PATCH v4] fix local port smlid
Eli Dorfman (Voltaire)
dorfman.eli at gmail.com
Thu Mar 12 08:58:17 PDT 2009
Sasha Khapyorsky wrote:
> 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 <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 (!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;
>
Local standby SM is polling the master SM, so if for some reason the master
decides to relinquish mastership then local SM will rediscover the fabric and
find the new SM.
Also, it is better to update portinfo in case others will attempt to use pi->master_sm_lid.
Eli
More information about the general
mailing list