summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Wojcik <krzysztof.wojcik@intel.com>2011-03-23 16:04:20 +0100
committerNeilBrown <neilb@suse.de>2011-03-24 10:10:56 +1100
commit3a5d04735bf36af7fdbca9e516472e14fb80d803 (patch)
tree604fc0e536f87bf33a7587a5e0f16fbdce7225a5
parenta28232b83f0f78898220c403600f6c2b1e51bdde (diff)
downloadmdadm-3a5d04735bf36af7fdbca9e516472e14fb80d803.tar.gz
FIX: imsm: Rebuild does not start on second failed disk
Problem: If we have an array with two failed disks and the array is in degraded state (now it is possible only for raid10 with 2 degraded mirrors) and we have two spare devices in the container, recovery process should be triggered on booth failed disks. It does not. Recovery is triggered only for first failed disk. Second failed disk remains unchanged although the spare drive exists in the container and is ready to recovery. Root cause: mdmon does not check if the array is degraded after recovery of first drive is completed. Resolution: Check if current number of disks in the array equals target number of disks. If not, trigger degradation check and then recovery process. Signed-off-by: Krzysztof Wojcik <krzysztof.wojcik@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r--monitor.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/monitor.c b/monitor.c
index 4a34bc1..7ac5907 100644
--- a/monitor.c
+++ b/monitor.c
@@ -219,6 +219,7 @@ static int read_and_act(struct active_array *a)
int deactivate = 0;
struct mdinfo *mdi;
int dirty = 0;
+ int count = 0;
a->next_state = bad_word;
a->next_action = bad_action;
@@ -311,7 +312,10 @@ static int read_and_act(struct active_array *a)
mdi->curr_state);
if (! (mdi->curr_state & DS_INSYNC))
check_degraded = 1;
+ count++;
}
+ if (count != a->info.array.raid_disks)
+ check_degraded = 1;
}
if (!deactivate &&