From 9a63cda7f2f3634988b6fb4dfc1c26f7b99b616e Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Tue, 6 Apr 2010 21:31:58 +0000
Subject: [PATCH] minor correction in job step allocation logic when a node in
 job goes DOWN or gets configured out

---
 src/slurmctld/step_mgr.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/slurmctld/step_mgr.c b/src/slurmctld/step_mgr.c
index 82f29f0f8ae..5112659b2af 100644
--- a/src/slurmctld/step_mgr.c
+++ b/src/slurmctld/step_mgr.c
@@ -623,11 +623,15 @@ _pick_step_nodes (struct job_record  *job_ptr,
 	}
 
 	if (step_spec->mem_per_cpu && _is_mem_resv()) {
-		int node_inx = 0, usable_mem;
-		for (i=bit_ffs(job_resrcs_ptr->node_bitmap);
-		     i<node_record_count; i++) {
+		int node_inx = -1, first_bit, last_bit, usable_mem;
+		first_bit = bit_ffs(job_resrcs_ptr->node_bitmap);
+		last_bit  = bit_fls(job_resrcs_ptr->node_bitmap);
+		for (i=first_bit; i<=last_bit; i++) {
 			if (!bit_test(job_resrcs_ptr->node_bitmap, i))
 				continue;
+			node_inx++;
+			if (!bit_test(nodes_avail, i))
+				continue;	/* node now DOWN */
 			usable_mem = job_resrcs_ptr->
 				     memory_allocated[node_inx] -
 				     job_resrcs_ptr->memory_used[node_inx];
@@ -650,8 +654,6 @@ _pick_step_nodes (struct job_record  *job_ptr,
 							job_resrcs_ptr->
 							cpus[node_inx]);
 			}
-			if (++node_inx >= job_resrcs_ptr->nhosts)
-				break;
 		}
 	}
 
-- 
GitLab