diff --git a/src/slurmctld/step_mgr.c b/src/slurmctld/step_mgr.c index 82f29f0f8ae2584671dc55f7383990f2df9dce3e..5112659b2af63372d0ecbd553fbb50a0ec8719aa 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; } }