diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c index d1ae5c78458e9f0bd121732478a0f9a56f0b6893..d906b9831185b6fcbdfc6c72bb46005f88fb9e27 100644 --- a/src/slurmctld/node_scheduler.c +++ b/src/slurmctld/node_scheduler.c @@ -647,16 +647,18 @@ _get_req_features(struct node_set *node_set_ptr, int node_set_size, time_t start_res = time(NULL); rc = job_test_resv(job_ptr, &start_res, false, &resv_bitmap, &exc_core_bitmap); - if ((rc != SLURM_SUCCESS) || - (bit_set_count(resv_bitmap) < min_nodes) || - (job_ptr->details->req_node_bitmap && - (!bit_super_set(job_ptr->details->req_node_bitmap, - resv_bitmap)))) { + if (rc == ESLURM_NODES_BUSY) { + save_avail_node_bitmap = avail_node_bitmap; + avail_node_bitmap = bit_alloc(node_record_count); + FREE_NULL_BITMAP(resv_bitmap); + /* Continue executing through _pick_best_nodes() below + * in order reject job if it can never run */ + } else if (rc != SLURM_SUCCESS) { FREE_NULL_BITMAP(resv_bitmap); + FREE_NULL_BITMAP(exc_core_bitmap); return ESLURM_NODES_BUSY; /* reserved */ - } - if (resv_bitmap && - (!bit_equal(resv_bitmap, avail_node_bitmap))) { + } else if (resv_bitmap && + (!bit_equal(resv_bitmap, avail_node_bitmap))) { bit_and(resv_bitmap, avail_node_bitmap); save_avail_node_bitmap = avail_node_bitmap; avail_node_bitmap = resv_bitmap;