From a260397a46dd0732194a336a48926d8a50ff8b10 Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Tue, 19 Jan 2016 12:26:17 -0800
Subject: [PATCH] Fix for socket allocations and specialized cores

Previous logic would prevent allocation of sockets to a job unless the
entire socket was available. If there were any specialized cores, the
socket was treated as being not available and unusable. For example,
if a node had 2 sockets, then a job requesting 2 specialized cores
would reserve one core on each of the two sockets and render the job
not runnable.
---
 src/plugins/select/cons_res/job_test.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/plugins/select/cons_res/job_test.c b/src/plugins/select/cons_res/job_test.c
index 4dee62fa3da..3fd31825d2a 100644
--- a/src/plugins/select/cons_res/job_test.c
+++ b/src/plugins/select/cons_res/job_test.c
@@ -217,6 +217,11 @@ static uint16_t _allocate_sc(struct job_record *job_ptr, bitstr_t *core_map,
 	uint16_t ncpus_per_core = 0xffff;	/* Usable CPUs per core */
 	uint32_t free_cpu_count = 0, used_cpu_count = 0, *used_cpu_array = NULL;
 
+	if (entire_sockets_only && job_ptr->details->whole_node &&
+	    (job_ptr->details->core_spec != (uint16_t) NO_VAL)) {
+		/* Ignore specialized cores when allocating "entire" socket */
+		entire_sockets_only = false;
+	}
 	if (job_ptr->details && job_ptr->details->mc_ptr) {
 		uint32_t threads_per_socket;
 		multi_core_data_t *mc_ptr = job_ptr->details->mc_ptr;
-- 
GitLab