diff --git a/src/slurmctld/job_scheduler.c b/src/slurmctld/job_scheduler.c
index 6c682fdce8f1fe53398c07317734aa4fe1ed2f73..1a0513f68420bef9bb74ff1f792323d11c6b6a86 100644
--- a/src/slurmctld/job_scheduler.c
+++ b/src/slurmctld/job_scheduler.c
@@ -641,6 +641,30 @@ send_reply:
 	return pending_jobs;
 }
 
+/* Return true of all partitions have the same priority, otherwise false. */
+static bool _all_partition_priorities_same(void)
+{
+	struct part_record *part_ptr;
+	ListIterator iter;
+	bool part_priority_set = false;
+	uint32_t part_priority = 0;
+	bool result = true;
+
+	iter = list_iterator_create(part_list);
+	while ((part_ptr = (struct part_record *) list_next(iter))) {
+		if (!part_priority_set) {
+			part_priority = part_ptr->priority;
+			part_priority_set = true;
+		} else if (part_priority != part_ptr->priority) {
+			result = false;
+			break;
+		}
+	}
+	list_iterator_destroy(iter);
+
+	return result;
+}
+
 /*
  * schedule - attempt to schedule all pending jobs
  *	pending jobs for each partition will be scheduled in priority
@@ -692,8 +716,11 @@ extern int schedule(uint32_t job_limit)
 			backfill_sched = true;
 #endif
 		if ((strcmp(sched_type, "sched/builtin") == 0) &&
-		    (strcmp(prio_type, "priority/basic") == 0))
+		    (strcmp(prio_type, "priority/basic") == 0) &&
+		    _all_partition_priorities_same())
 			fifo_sched = true;
+		else
+			fifo_sched = false;
 		/* Disable avoiding of fragmentation with sched/wiki */
 		if ((strcmp(sched_type, "sched/wiki") == 0) ||
 		    (strcmp(sched_type, "sched/wiki2") == 0))