ibnetdiscover: fix error when discovery started on node with more that one port
PATCH 1/1 ibnetdiscover: fix error when discovery started on node with more that one port
When discovery is started on a node with more than one active port it tries to send mads from second Hca port and fails.
ibnetdiscover should not try and extend_path from Hca except for starting point.
--- .../libibnetdisc/include/infiniband/ibnetdisc.h | 1 + infiniband-diags/libibnetdisc/src/ibnetdisc.c | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-)
infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h +1 -0
@@ -149,6 +149,7 @@ typedef struct ibnd_fabric {* or by default the node you ar running on */ ibnd_node_t *from_node; +int from_port;/* NULL term list of all nodes in the fabric */ ibnd_node_t *nodes;/* NULL terminated list of all chassis found in the fabric */
infiniband-diags/libibnetdisc/src/ibnetdisc.c +4 -3
@@ -199,7 +199,7 @@ static int recv_port_info(smp_engine_t * engine, ibnd_smp_t * smp,if (port_num &&mad_get_field (port->info,0 ,IB_PORT_PHYS_STATE_F ) ==IB_PORT_PHYS_STATE_LINKUP && ((node->type ==IB_NODE_SWITCH && port_num != local_port) || - (node == fabric->from_node && port_num == local_port))) { + (node == fabric->from_node && port_num == fabric->from_port))) {ib_portid_t path = smp->path;if (extend_dpath (engine, &path, port_num) >0 )query_node_info (engine, &path, node);
@@ -324,9 +324,10 @@ static int recv_node_info(smp_engine_t * engine, ibnd_smp_t * smp,dump_endnode (&smp->path, node_is_new ?"new" :"known" , node, port); -if (rem_node ==NULL )/* this is the start node */ +if (rem_node ==NULL ) {/* this is the start node */ fabric->from_node = node; -else { + fabric->from_port = port_num; + }else {/* link ports... */ int rem_port_num =get_last_port (&smp->path);
Signature · 6 lines
1.7.2.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Eli,
Isn't this the same as what I submitted back on 8/25 and subsequently applied (http://www.spinics.net/lists/linux-rdma/msg05590.html) ?
-- Hal
Quoted 52 lines · Eli Dorfman (Voltaire)
When discovery is started on a node with more than one active port it tries to send mads from second Hca port and fails.
ibnetdiscover should not try andextend_pathfrom Hca except for starting point.---
.../libibnetdisc/include/infiniband/ibnetdisc.h | 1 +infiniband-diags/libibnetdisc/src/ibnetdisc.c| 7 ++++---2 files changed, 5 insertions(+), 3 deletions(-)infiniband-diags/libibnetdisc/include/infiniband/ibnetdisc.h +1
-0@@ -149,6 +149,7 @@ typedef struct ibnd_fabric {* or by default the node you ar running on */ ibnd_node_t *from_node; + int from_port; /* NULL term list of all nodes in the fabric */ ibnd_node_t *nodes; /* NULL terminated list of all chassis found in the fabric */infiniband-diags/libibnetdisc/src/ibnetdisc.c +0
-0@@ -199,7 +199,7 @@ static int recv_port_info(smp_engine_t * engine, ibnd_smp_t * smp, if (port_num && mad_get_field(port->info, 0, IB_PORT_PHYS_STATE_F)==
IB_PORT_PHYS_STATE_LINKUP
&& ((node->type==IB_NODE_SWITCH&&port_num!=local_port) ||
- (node ==fabric->from_node&&port_num==local_port))) {
+ (node ==fabric->from_node&&port_num==fabric->from_port))) {ib_portid_tpath =smp->path;
if (extend_dpath(engine, &path, port_num)> 0)query_node_info(engine, &path, node);infiniband-diags/libibnetdisc/src/ibnetdisc.c +3
-3@@ -324,9 +324,10 @@ static int recv_node_info(smp_engine_t * engine, ibnd_smp_t * smp, dump_endnode(&smp->path, node_is_new ? "new" : "known", node, port); - if (rem_node == NULL) /* this is the start node */ + if (rem_node == NULL) { /* this is the start node */ fabric->from_node = node; - else { + fabric->from_port = port_num; + } else { /* link ports... */ int rem_port_num = get_last_port(&smp->path); --1.7.2.1
Quoted 5 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html