[PATCH 08/31] Send information to managemon about reshape request
am 09.11.2010 18:00:57 von adam.kwolekWhen monitor made metadata update and indicates request to managemon to continue reshape initialization, kick managemon to perform its action, unless array is not during deactivation.
Signed-off-by: Adam Kwolek
---
mdadm/mdadm/monitor.c | 15 ++++++++++++++-
mdadm/mdadm/super-intel.c | 16 ++++++++++++++++
2 files changed, 30 insertions(+), 1 deletions(-)
diff --git a/mdadm/mdadm/monitor.c b/mdadm/mdadm/monitor.c index 313c8af..e51bf7f 100644
--- a/mdadm/mdadm/monitor.c
+++ b/mdadm/mdadm/monitor.c
@@ -23,6 +23,7 @@
#include
#include
#include
+#include
static char *array_states[] = {
"clear", "inactive", "suspended", "readonly", "read-auto", @@ -353,8 +354,20 @@ static int read_and_act(struct active_array *a)
signal_manager();
}
- if (deactivate)
+ if (deactivate) {
a->container = NULL;
+ /* break reshape also
+ */
+ if (a->reshape_delta_disks != RESHAPE_IN_PROGRESS)
+ a->reshape_delta_disks = RESHAPE_NOT_ACTIVE;
+ }
+
+ /* signal manager when real delta_disks value is present
+ */
+ if ((a->reshape_delta_disks != RESHAPE_NOT_ACTIVE) &&
+ (a->reshape_delta_disks != RESHAPE_IN_PROGRESS)) {
+ signal_manager();
+ }
return dirty;
}
diff --git a/mdadm/mdadm/super-intel.c b/mdadm/mdadm/super-intel.c index 100a19c..baf8ef4 100644
--- a/mdadm/mdadm/super-intel.c
+++ b/mdadm/mdadm/super-intel.c
@@ -4755,6 +4755,18 @@ static int imsm_set_array_state(struct active_array *a, int consistent)
__u8 map_state = imsm_check_degraded(super, dev, failed);
__u32 blocks_per_unit;
+ if (a->reshape_delta_disks != RESHAPE_NOT_ACTIVE) {
+ /* array state change is blocked due to reshape action
+ * if reshape_delta_disks is set there are no real
+ * changes to array made so far, metadata changes
+ * are during applying only before reshape.
+ *
+ * '1' is returned to indicate that array is clean
+ */
+ dprintf("imsm: prepare to reshape\n");
+ return 1;
+ }
+
/* before we activate this array handle any missing disks */
if (consistent == 2)
handle_missing(super, dev);
@@ -5106,6 +5118,10 @@ 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 (a->reshape_delta_disks != RESHAPE_NOT_ACTIVE)
+ return NULL;
+
if (imsm_check_degraded(super, dev, failed) != IMSM_T_STATE_DEGRADED)
return NULL;
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html