summaryrefslogtreecommitdiff
path: root/super-intel.c
diff options
context:
space:
mode:
authorAdam Kwolek <adam.kwolek@intel.com>2011-12-07 13:58:30 +0100
committerNeilBrown <neilb@suse.de>2011-12-08 14:08:21 +1100
commit3d59f0c039281d0b393d11f6eb8b4ce6bcdbc236 (patch)
treeaf19dae4cffeda3a9031e27088ed6741de92152f /super-intel.c
parent177889945307b38dabae42b9e937312866536829 (diff)
imsm: FIX: Finish rebuild and initialization when missing drive is handled
When missing device is handled for rebuild or initialization end_migration() should be called to merge ords in case additional degradation. I've removed this call to end_migration() as it was called for migration also. Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'super-intel.c')
-rw-r--r--super-intel.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/super-intel.c b/super-intel.c
index de07f660..9689fdd4 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -6192,6 +6192,17 @@ static void handle_missing(struct intel_super *super, struct imsm_dev *dev)
return;
dprintf("imsm: mark missing\n");
+ /* end process for initialization and rebuild only
+ */
+ if (is_gen_migration(dev) == 0) {
+ __u8 map_state;
+ int failed;
+
+ failed = imsm_count_failed(super, dev, MAP_0);
+ map_state = imsm_check_degraded(super, dev, failed, MAP_0);
+
+ end_migration(dev, super, map_state);
+ }
for (dl = super->missing; dl; dl = dl->next)
mark_missing(dev, &dl->disk, dl->index);
super->updates_pending++;