diff --git a/NEWS b/NEWS
index 3f1bdda9d8a188d81f8c8511c9a170be6e09b99f..83d6d6aebccd838d6257e61feeeb852db26b229b 100644
--- a/NEWS
+++ b/NEWS
@@ -22,6 +22,8 @@ documents those changes that are of interest to users and admins.
     specific reservation.
  -- Treat reservation with no nodes like one that starts later (let jobs of any
     size get queued).
+ -- Fix bug in gang scheduling logic that would temporarily resume to many jobs
+    after a job completed.
 
 * Changes in SLURM 2.2.0
 ========================
diff --git a/src/slurmctld/gang.c b/src/slurmctld/gang.c
index 7e339df33606caca6b007ca2e299bdeaf920722b..d8af1351ec7a053b0b0421c70ee2e5bee1f3702f 100644
--- a/src/slurmctld/gang.c
+++ b/src/slurmctld/gang.c
@@ -687,7 +687,7 @@ static int _sort_partitions(void *part1, void *part2)
 {
 	int prio1 = ((struct gs_part *) part1)->priority;
 	int prio2 = ((struct gs_part *) part2)->priority;
-	return prio1 - prio2;
+	return prio2 - prio1;
 }
 
 /* Scan the partition list. Add the given job as a "shadow" to every
diff --git a/src/slurmctld/power_save.c b/src/slurmctld/power_save.c
index 7661fec39d368e8d536653d66f6e99cd16155126..e3d42753d37025359e8184c01ef540a234bc56e2 100644
--- a/src/slurmctld/power_save.c
+++ b/src/slurmctld/power_save.c
@@ -46,6 +46,10 @@
 #  include "config.h"
 #endif
 
+#ifndef   _GNU_SOURCE
+#  define _GNU_SOURCE
+#endif
+
 #include <signal.h>
 #include <stdlib.h>
 #include <string.h>