diff --git a/src/plugins/select/bluegene/bl_bgq/bridge_status.cc b/src/plugins/select/bluegene/bl_bgq/bridge_status.cc index 8a1a6111f696f593bf26d28d63cf12337ef5a812..62c639ebe7bcd7b560b89f50194f2e7cc5de424a 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,