From 54dd7c3b75eb27206e06c94e24f6c9b6f58f7699 Mon Sep 17 00:00:00 2001
From: Danny Auble <da@llnl.gov>
Date: Wed, 7 Oct 2009 22:43:11 +0000
Subject: [PATCH] svn merge -r18820:18835
 https://eris.llnl.gov/svn/slurm/branches/slurm-2.0

---
 NEWS                                          |  2 ++
 .../select/bluegene/plugin/bg_block_info.c    | 19 +++++++++++++++----
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index 5787c4336c3..683c008a92f 100644
--- a/NEWS
+++ b/NEWS
@@ -240,6 +240,8 @@ documents those changes that are of interest to users and admins.
     file.
  -- In sched/wiki plugin (for Maui) fix possible message truncation on very 
     large cluster.
+ -- BLUEGENE - Fix for handling undocumented Deallocating to Configuring to 
+    Free block transition state.
 
 * Changes in SLURM 2.0.6
 ========================
diff --git a/src/plugins/select/bluegene/plugin/bg_block_info.c b/src/plugins/select/bluegene/plugin/bg_block_info.c
index c00e9150138..76e8809f1e5 100644
--- a/src/plugins/select/bluegene/plugin/bg_block_info.c
+++ b/src/plugins/select/bluegene/plugin/bg_block_info.c
@@ -362,6 +362,7 @@ extern int update_block_list()
 			  //plugin set error
 			  && bg_record->state != state) {
 			int skipped_dealloc = 0;
+
 			debug("state of Block %s was %d and now is %d",
 			      bg_record->bg_block_id, 
 			      bg_record->state, 
@@ -387,8 +388,18 @@ extern int update_block_list()
 				xfree(bg_record->target_name);
 				bg_record->target_name =
 					xstrdup(bg_record->user_name);
-			}
-
+			} else if((bg_record->state 
+				   == RM_PARTITION_DEALLOCATING)
+				  && (state == RM_PARTITION_CONFIGURING)) 
+				/* This is a funky state IBM says
+				   isn't a bug, but all their
+				   documentation says this doesn't
+				   happen, but IBM says oh yeah, you
+				   weren't really suppose to notice
+				   that. So we will just skip this
+				   state and act like this didn't happen. */
+				goto nochange_state;
+			
 			bg_record->state = state;
 
 			if(bg_record->state == RM_PARTITION_DEALLOCATING
@@ -407,7 +418,7 @@ extern int update_block_list()
 					xstrdup(bg_record->user_name);
 			}
 #endif
-			else if(bg_record->state == RM_PARTITION_CONFIGURING) 
+			else if(bg_record->state == RM_PARTITION_CONFIGURING)
 				bg_record->boot_state = 1;
 			else if(bg_record->state == RM_PARTITION_FREE) {
 				if(remove_from_bg_list(bg_lists->job_running, 
@@ -430,8 +441,8 @@ extern int update_block_list()
 				trigger_block_error();
 			}
 			updated = 1;
-			
 		}
+	nochange_state:
 
 		/* check the boot state */
 		debug3("boot state for block %s is %d",
-- 
GitLab