diff --git a/src/plugins/sched/backfill/backfill.c b/src/plugins/sched/backfill/backfill.c index aa8625e9fe7b2b88fa20ac8dc31bbc22aef3362c..25fa1fb9a9d73cde388a6b9b2578d196be41f734 100644 --- a/src/plugins/sched/backfill/backfill.c +++ b/src/plugins/sched/backfill/backfill.c @@ -1322,12 +1322,20 @@ static void _add_reservation(uint32_t start_time, uint32_t end_reserve, bool placed = false; int i, j; +#if 0 + info("add job start:%u end:%u", start_time, end_reserve); for (j = 0; ; ) { - if ((node_space[j].begin_time >= start_time) || - (node_space[j].end_time == start_time)) { - /* no need to insert new start entry record */ - placed = true; - } else if (node_space[j].end_time > start_time) { + info("node start:%u end:%u", + (uint32_t) node_space[j].begin_time, + (uint32_t) node_space[j].end_time); + if ((j = node_space[j].next) == 0) + break; + } +#endif + + start_time = MAX(start_time, node_space[0].begin_time); + for (j = 0; ; ) { + if (node_space[j].end_time > start_time) { /* insert start entry record */ i = *node_space_recs; node_space[i].begin_time = start_time; @@ -1340,10 +1348,12 @@ static void _add_reservation(uint32_t start_time, uint32_t end_reserve, (*node_space_recs)++; placed = true; } + if (node_space[j].end_time == start_time) { + /* no need to insert new start entry record */ + placed = true; + } if (placed == true) { while ((j = node_space[j].next)) { - if (end_reserve == node_space[j].end_time) - break; if (end_reserve < node_space[j].end_time) { /* insert end entry record */ i = *node_space_recs; @@ -1359,6 +1369,9 @@ static void _add_reservation(uint32_t start_time, uint32_t end_reserve, (*node_space_recs)++; break; } + if (end_reserve == node_space[j].end_time) { + break; + } } break; }