From 7f348fc32f4573606951ec17638ce2484fa12d89 Mon Sep 17 00:00:00 2001
From: Danny Auble <da@schedmd.com>
Date: Fri, 21 Oct 2011 10:15:50 -0700
Subject: [PATCH] BGQ - if using a sub midplane system remove any blocks that
 have missing cnodes in them.

---
 .../select/bluegene/bl_bgq/bridge_status.cc      | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/src/plugins/select/bluegene/bl_bgq/bridge_status.cc b/src/plugins/select/bluegene/bl_bgq/bridge_status.cc
index 8a1a6111f69..62c639ebe7b 100644
--- a/src/plugins/select/bluegene/bl_bgq/bridge_status.cc
+++ b/src/plugins/select/bluegene/bl_bgq/bridge_status.cc
@@ -229,6 +229,7 @@ static void _handle_node_change(ba_mp_t *ba_mp, const std::string& cnode_loc,
 	bg_record_t *bg_record;
 	ba_mp_t *found_ba_mp;
 	ListIterator itr, itr2;
+	List delete_list = NULL;
 
 	if (!ba_mp->cnode_err_bitmap)
 		ba_mp->cnode_err_bitmap = bit_alloc(bg_conf->mp_cnode_cnt);
@@ -284,6 +285,17 @@ static void _handle_node_change(ba_mp_t *ba_mp, const std::string& cnode_loc,
 					continue;
 			}
 
+			if (bg_conf->sub_mp_sys
+			    && (state == Hardware::Missing)) {
+				if (!delete_list)
+					delete_list = list_create(NULL);
+				debug("Removing block %s, "
+				      "it has missing cnodes",
+				      bg_record->bg_block_id);
+				list_push(delete_list, bg_record);
+				break;
+			}
+
 			if (!found_ba_mp->cnode_err_bitmap)
 				found_ba_mp->cnode_err_bitmap =
 					bit_alloc(bg_conf->mp_cnode_cnt);
@@ -313,6 +325,10 @@ static void _handle_node_change(ba_mp_t *ba_mp, const std::string& cnode_loc,
 	list_iterator_destroy(itr);
 	slurm_mutex_unlock(&block_state_mutex);
 
+	if (delete_list) {
+		free_block_list(NO_VAL, delete_list, 1, 0);
+		list_destroy(delete_list);
+	}
 }
 
 static void _handle_cable_change(int dim, ba_mp_t *ba_mp,
-- 
GitLab