From bdb51ea6ba71a3e17f81124527552de9a242dcc6 Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Fri, 14 May 2010 16:39:31 +0000
Subject: [PATCH] fix bug in select/linear caused by added gres support

---
 src/plugins/select/linear/select_linear.c | 31 ++++++++++++++---------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/src/plugins/select/linear/select_linear.c b/src/plugins/select/linear/select_linear.c
index 62a6bb4e704..30024f78be8 100644
--- a/src/plugins/select/linear/select_linear.c
+++ b/src/plugins/select/linear/select_linear.c
@@ -673,6 +673,24 @@ static int _job_count_bitmap(struct cr_record *cr_ptr,
 			cpu_cnt   = node_ptr->config_ptr->cpus;
 		else
 			cpu_cnt = node_ptr->cpus;
+
+		if (cr_ptr->nodes[i].gres_list)
+			gres_list = cr_ptr->nodes[i].gres_list;
+		else
+			gres_list = node_ptr->gres_list;
+		gres_cpus = gres_plugin_job_test(job_ptr->gres_list, 
+						 gres_list, use_total_gres);
+		if ((gres_cpus != NO_VAL) && (gres_cpus < cpu_cnt)) {
+			bit_clear(jobmap, i);
+			continue;
+		}
+
+		if (mode == SELECT_MODE_TEST_ONLY) {
+			bit_set(jobmap, i);
+			count++;
+			continue;	/* No need to test other resources */
+		}
+
 		if (job_memory_cpu || job_memory_node) {
 			alloc_mem = cr_ptr->nodes[i].alloc_memory;
 			if (select_fast_schedule) {
@@ -694,17 +712,6 @@ static int _job_count_bitmap(struct cr_record *cr_ptr,
 			}
 		}
 
-		if (cr_ptr->nodes[i].gres_list)
-			gres_list = cr_ptr->nodes[i].gres_list;
-		else
-			gres_list = node_ptr->gres_list;
-		gres_cpus = gres_plugin_job_test(job_ptr->gres_list, 
-						 gres_list, use_total_gres);
-		if ((gres_cpus != NO_VAL) && (gres_cpus < cpu_cnt)) {
-			bit_clear(jobmap, i);
-			continue;
-		}
-
 		if (cr_ptr->nodes[i].exclusive_cnt != 0) {
 			/* already reserved by some exclusive job */
 			bit_clear(jobmap, i);
@@ -2611,7 +2618,7 @@ extern int select_p_select_nodeinfo_set_all(time_t last_query_time)
 	for (i=0; i<node_record_count; i++) {
 		select_nodeinfo_t *nodeinfo;
 
-		node_ptr = &(node_record_table_ptr[i]);
+		node_ptr = node_record_table_ptr + i;
 		nodeinfo = node_ptr->select_nodeinfo->data;
 
 		if ((node_ptr->node_state & NODE_STATE_COMPLETING) ||
-- 
GitLab