Thread (5 messages) 5 messages, 2 authors, 2011-10-02

Re: [PATCH 1/2] imsm: FIX: Do not allow for spare disk activation during reshape

flat view

From: NeilBrown <hidden>
Date: 2011-10-02 23:31:16

On Thu, 29 Sep 2011 17:45:36 +0200 Adam Kwolek [off-list ref] wrote:
Spare disk activation or starting repair for one array while on second
reshape is in progress, will lead to IMSM incompatible situation when
2 arrays in container shares different disks sets.
This can cause that 2 processes in container /reshape and rebuild/
are in progress in parallel. This is IMSM incompatible situation also.

Block spare disk activation and starting resync if any reshape in container
is in progress.

Signed-off-by: Adam Kwolek <redacted>
Thanks - applied.

(though I changed the while loop into a for loop... I couldn't help myself ;-)

NeilBrown

quoted hunk ↗ jump to hunk
---

 super-intel.c |   33 +++++++++++++++++++++++++++++----
 1 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/super-intel.c b/super-intel.c
index 07d47b5..5504c17 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -2237,6 +2237,33 @@ static int write_imsm_migr_rec(struct supertype *st)
 }
 #endif /* MDASSEMBLE */
 
+/* spare/missing disks activations are not allowe when
+ * array/container performs reshape operation, because
+ * all arrays in container works on the same disks set
+ */
+int imsm_reshape_blocks_arrays_changes(struct intel_super *super)
+{
+	int rv = 0;
+	struct intel_dev *i_dev = super->devlist;
+	struct imsm_dev *dev;
+
+	/* check whole container
+	 */
+	while (i_dev) {
+		dev = i_dev->dev;
+		if (dev->vol.migr_state &&
+		    dev->vol.migr_type == MIGR_GEN_MIGR) {
+			/* No repair during any migration in container
+			 */
+			rv = 1;
+			break;
+		}
+		i_dev = i_dev->next;
+	}
+
+	return rv;
+}
+
 static void getinfo_super_imsm_volume(struct supertype *st, struct mdinfo *info, char *dmap)
 {
 	struct intel_super *super = st->sb;
@@ -6592,10 +6619,8 @@ static struct mdinfo *imsm_activate_spare(struct active_array *a,
 	dprintf("imsm: activate spare: inst=%d failed=%d (%d) level=%d\n",
 		inst, failed, a->info.array.raid_disks, a->info.array.level);
 
-	if (dev->vol.migr_state &&
-	    dev->vol.migr_type == MIGR_GEN_MIGR)
-		/* No repair during migration */
-		return NULL;
+	if (imsm_reshape_blocks_arrays_changes(super))
+			return NULL;
 
 	if (a->info.array.level == 4)
 		/* No repair for takeovered array
  

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help