From b6a8373cc1b1806d37a53109ae0f368bad958fc1 Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Tue, 12 Apr 2016 08:54:25 -0700
Subject: [PATCH] power/cray - Prevent possible divide by zero

---
 NEWS                                | 1 +
 src/plugins/power/cray/power_cray.c | 7 +++++--
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index 0c1a454dab9..2e1bac7290f 100644
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,7 @@ documents those changes that are of interest to users and administrators.
     and it doesn't meet basic requirements.
  -- burst_buffer/cray - Fix for script creating or deleting persistent buffer
     would fail "paths" operation and hold the job.
+ -- power/cray - Prevent possible divide by zero.
 
 * Changes in Slurm 15.08.10
 ===========================
diff --git a/src/plugins/power/cray/power_cray.c b/src/plugins/power/cray/power_cray.c
index e0ef5ac7788..1afce377eaa 100644
--- a/src/plugins/power/cray/power_cray.c
+++ b/src/plugins/power/cray/power_cray.c
@@ -1437,13 +1437,16 @@ static void _rebalance_node_power(void)
 	if ((alloc_power > cap_watts) || (node_power_needed > avail_power)) {
 		/* When CapWatts changes, we might need to lower nodes more
 		 * than the configured change rate specifications */
-		uint32_t red1 = 0, red2 = 0;
+		uint32_t red1 = 0, red2 = 0, node_num;
 		if (alloc_power > cap_watts)
 			red1 = alloc_power - cap_watts;
 		if (node_power_needed > avail_power)
 			red2 = node_power_needed - avail_power;
 		red1 = MAX(red1, red2);
-		red1 /= (node_power_lower_cnt + node_power_same_cnt);
+		node_num = node_power_lower_cnt + node_power_same_cnt;
+		if (node_num == 0)
+			node_num = node_record_count;
+		red1 /= node_num;
 		for (i = 0, node_ptr = node_record_table_ptr;
 		     i < node_record_count; i++, node_ptr++) {
 			if (!node_ptr->power || !node_ptr->power->new_cap_watts)
-- 
GitLab