[ofa-general] [PATCH] opensm: updn/connect_roots: preserve connectivity to root nodes

Sasha Khapyorsky sashak at voltaire.com
Mon Mar 24 02:36:02 PDT 2008


Option '--connect_roots' was added in order to preserve connectivity
between root nodes when Up/Down routing algorithm is used (by default
Up/Down leaves root nodes not connected).

The problems with this option could appear with some topologies when
some root's (root A) neighbor switch has valid up/down path (which
could not be shortest path due to up/down restriction) to another root
node (root B) in a fabric which cross this root A node and at the same
time root A has shortest path (preserved with --connect_roots option)
to the root B which crosses its neighbor.

In this case we will have single routing loop which is not good.
(actually it causes OpenSM to crash during multicast spanning trees
building).

Solution is to preserve to root nodes shortest paths (on when
--connect_root is specified) for all switches, not only other roots as
it is today.

Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---
 opensm/opensm/osm_ucast_updn.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/opensm/opensm/osm_ucast_updn.c b/opensm/opensm/osm_ucast_updn.c
index 95bd946..0dc9f1f 100644
--- a/opensm/opensm/osm_ucast_updn.c
+++ b/opensm/opensm/osm_ucast_updn.c
@@ -454,8 +454,7 @@ static int __osm_subn_set_up_down_min_hop_table(IN updn_t * p_updn)
 		p_sw = p_next_sw;
 		p_next_sw = (osm_switch_t *) cl_qmap_next(&p_sw->map_item);
 		/* Clear Min Hop Table */
-		if (p_subn->opt.connect_roots
-		    && !((struct updn_node *)p_sw->priv)->rank)
+		if (p_subn->opt.connect_roots)
 			updn_clear_root_hops(p_updn, p_sw);
 		else
 			osm_switch_clear_hops(p_sw);
-- 
1.5.4.rc2.60.gb2e62




More information about the general mailing list