diff mbox

[opensm] Fix dropping node after setPkey mad

Message ID 52793368.3090908@dev.mellanox.co.il (mailing list archive)
State Accepted
Delegated to: Hal Rosenstock
Headers show

Commit Message

Hal Rosenstock Nov. 5, 2013, 6:05 p.m. UTC
From: Dan Ben Yosef <danby@mellanox.com>

Need to check pkey received counter flag only
after get mads and not set.

Signed-off-by: Dan Ben Yosef <danby@mellanox.com>
---
 include/opensm/osm_port.h |    3 ++-
 opensm/osm_pkey_rcv.c     |    3 ++-
 opensm/osm_port.c         |    6 ++++--
 3 files changed, 8 insertions(+), 4 deletions(-)
diff mbox

Patch

diff --git a/include/opensm/osm_port.h b/include/opensm/osm_port.h
index a1efc97..f4b7efd 100644
--- a/include/opensm/osm_port.h
+++ b/include/opensm/osm_port.h
@@ -558,7 +558,8 @@  void osm_physp_set_port_info(IN osm_physp_t * p_physp,
 void osm_physp_set_pkey_tbl(IN osm_log_t * p_log, IN const osm_subn_t * p_subn,
 			    IN osm_physp_t * p_physp,
 			    IN ib_pkey_table_t * p_pkey_tbl,
-			    IN uint16_t block_num);
+			    IN uint16_t block_num,
+			    IN boolean_t is_set);
 /*
 * PARAMETERS
 *	p_log
diff --git a/opensm/osm_pkey_rcv.c b/opensm/osm_pkey_rcv.c
index 81da39c..6650766 100644
--- a/opensm/osm_pkey_rcv.c
+++ b/opensm/osm_pkey_rcv.c
@@ -186,7 +186,8 @@  void osm_pkey_rcv_process(IN void *context, IN void *data)
 			       p_pkey_tbl, FILE_ID, OSM_LOG_DEBUG);
 
 	osm_physp_set_pkey_tbl(sm->p_log, sm->p_subn,
-			       p_physp, p_pkey_tbl, block_num);
+			       p_physp, p_pkey_tbl, block_num,
+			       p_context->set_method);
 
 Exit:
 	cl_plock_release(sm->p_lock);
diff --git a/opensm/osm_port.c b/opensm/osm_port.c
index 9dd7992..46152c5 100644
--- a/opensm/osm_port.c
+++ b/opensm/osm_port.c
@@ -646,7 +646,8 @@  boolean_t osm_link_is_healthy(IN const osm_physp_t * p_physp)
 void osm_physp_set_pkey_tbl(IN osm_log_t * p_log, IN const osm_subn_t * p_subn,
 			    IN osm_physp_t * p_physp,
 			    IN ib_pkey_table_t * p_pkey_tbl,
-			    IN uint16_t block_num)
+			    IN uint16_t block_num,
+			    IN boolean_t is_set)
 {
 	uint16_t max_blocks;
 
@@ -687,7 +688,8 @@  void osm_physp_set_pkey_tbl(IN osm_log_t * p_log, IN const osm_subn_t * p_subn,
 	}
 
 	/* decrement block received counter */
-	p_physp->pkeys.rcv_blocks_cnt--;
+	if(!is_set)
+		p_physp->pkeys.rcv_blocks_cnt--;
 	osm_pkey_tbl_set(&p_physp->pkeys, block_num, p_pkey_tbl,
 			 p_subn->opt.allow_both_pkeys);
 }