From 42b241b194a7e7197e3c3e079b8e7da00801f9fa Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Thu, 15 Dec 2005 23:03:11 +0000
Subject: [PATCH] Set job's num_procs to the actual processor count in
 allocated BlueGene block.

---
 NEWS                                            |  1 +
 src/plugins/select/bluegene/plugin/bg_job_run.c | 15 ++++++++++++---
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/NEWS b/NEWS
index cd09568e20a..bef654dca3e 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,7 @@ documents those changes that are of interest to users and admins.
     epilog completed.
  -- Added some infrastructure for job suspend/resume (scontrol, api, and 
     slurmctld stub).
+ -- Set job's num_procs to the actual processor count in allocated BlueGene block.
 
 * Changes in SLURM 0.7.0-pre6
 =============================
diff --git a/src/plugins/select/bluegene/plugin/bg_job_run.c b/src/plugins/select/bluegene/plugin/bg_job_run.c
index 4ecbf415255..6bd75cd765b 100644
--- a/src/plugins/select/bluegene/plugin/bg_job_run.c
+++ b/src/plugins/select/bluegene/plugin/bg_job_run.c
@@ -658,9 +658,11 @@ int term_jobs_on_block(pm_partition_id_t bg_block_id)
 extern int start_job(struct job_record *job_ptr)
 {
 	int rc = SLURM_SUCCESS;
+	bg_record_t *bg_record = NULL;
+
 #ifdef HAVE_BG_FILES
 	bg_update_t *bg_update_ptr = NULL;
-		
+
 	bg_update_ptr = xmalloc(sizeof(bg_update_t));
 	bg_update_ptr->op = START_OP;
 	bg_update_ptr->uid = job_ptr->user_id;
@@ -669,14 +671,17 @@ extern int start_job(struct job_record *job_ptr)
 		SELECT_DATA_BLOCK_ID, &(bg_update_ptr->bg_block_id));
 	select_g_get_jobinfo(job_ptr->select_jobinfo,
 		SELECT_DATA_NODE_USE, &(bg_update_ptr->node_use));
+	bg_record = find_bg_record(bg_update_ptr->bg_block_id);
+	if (bg_record) {
+		job_ptr->num_procs = (bg_record->cnodes_per_bp *
+			bg_record->bp_count);
+	}
 	info("Queue start of job %u in BG block %s",
 	     job_ptr->job_id, 
 	     bg_update_ptr->bg_block_id);
-
 	_block_op(bg_update_ptr);
 #else
 	ListIterator itr;
-	bg_record_t *bg_record = NULL;
 	bg_record_t *found_record = NULL;
 	char *block_id = NULL;
 	uint16_t node_use;
@@ -692,6 +697,10 @@ extern int start_job(struct job_record *job_ptr)
 			return rc;
 		}
 		bg_record = find_bg_record(block_id);
+		if (bg_record) {
+			job_ptr->num_procs = (bg_record->cnodes_per_bp *
+				bg_record->bp_count);
+		}
 		itr = list_iterator_create(bg_list);
 		while ((found_record = (bg_record_t *) list_next(itr))) {
 			if (bg_record->full_block)
-- 
GitLab