diff --git a/NEWS b/NEWS
index 6d6904ea6f821f4b754bff5efd939acb0aede21d..e2857d87f628b0df7636923d8bc8344cc6502bdb 100644
--- a/NEWS
+++ b/NEWS
@@ -155,6 +155,8 @@ documents those changes that are of interest to users and admins.
  -- Remove --program-prefix from spec file since it appears to be added by
     default and appeared to break other things.
  -- Updated the automake min version in autogen.sh to be correct.
+ -- Select/cons_res - Correct total CPU count allocated to a job with
+    --exclusive and --cpus-per-task options
 
 * Changes in Slurm 2.5.7
 ========================
diff --git a/src/plugins/select/cons_res/job_test.c b/src/plugins/select/cons_res/job_test.c
index 8fb879b51ced4d722c470125791470be2be2d7dc..9f9318ad7f09705793f1a84639088a38616e86ec 100644
--- a/src/plugins/select/cons_res/job_test.c
+++ b/src/plugins/select/cons_res/job_test.c
@@ -411,7 +411,7 @@ uint16_t _allocate_cores(struct job_record *job_ptr, bitstr_t *core_map,
 			 bitstr_t *part_core_map, const uint32_t node_i,
 			 bool cpu_type)
 {
-	uint16_t avail_cpus = 0, num_tasks = 0;
+	uint16_t avail_cpus = 0, num_tasks = 0, total_cpus = 0;
 	uint32_t core_begin    = cr_get_coremap_offset(node_i);
 	uint32_t core_end      = cr_get_coremap_offset(node_i+1);
 	uint32_t c;
@@ -559,6 +559,7 @@ uint16_t _allocate_cores(struct job_record *job_ptr, bitstr_t *core_map,
 
 	/* convert from PER_CORE to TOTAL_FOR_NODE */
 	avail_cpus *= free_core_count;
+	total_cpus = avail_cpus;
 	num_tasks  *= free_core_count;
 
 	/* If job requested exclusive rights to the node don't do the min here
@@ -604,10 +605,11 @@ uint16_t _allocate_cores(struct job_record *job_ptr, bitstr_t *core_map,
 		bit_nclear(core_map, c, core_end-1);
 
 fini:
-	if (!num_tasks) {
+	if (!num_tasks)
 		bit_nclear(core_map, core_begin, core_end-1);
-	}
 	xfree(free_cores);
+	if ((job_ptr->details->shared == 0) && num_tasks)
+		return total_cpus;
 	return num_tasks * cpus_per_task;
 }