summaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2011-12-23 09:57:19 +1100
committerNeilBrown <neilb@suse.de>2011-12-23 09:57:19 +1100
commit60fc13702a1b35118c1548e9c257fa038cecb658 (patch)
tree163094eb4ae229f9263bfd05b788f29cc14e94f5 /drivers/md
parent30d7a4836847bdb10b32c78a4879d4aebe0f193b (diff)
downloadlinux-60fc13702a1b35118c1548e9c257fa038cecb658.tar.gz
linux-60fc13702a1b35118c1548e9c257fa038cecb658.tar.bz2
linux-60fc13702a1b35118c1548e9c257fa038cecb658.zip
md: don't give up looking for spares on first failure-to-add
Before performing a recovery we try to remove any spares that might not be working, then add any that might have become relevant. Currently we abort on the first spare that cannot be added. This is a false optimisation. It is conceivable that - depending on rules in the personality - a subsequent spare might be accepted. Also the loop does other things like count the available spares and reset the 'recovery_offset' value. If we abort early these might not happen properly. So remove the early abort. In particular if you have an array what is undergoing recovery and which has extra spares, then the recovery may not restart after as reboot as the could of 'spares' might end up as zero. Reported-by: Anssi Hannula <anssi.hannula@iki.fi> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/md.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index ee981737edfc..f47f1f8ac44b 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -7360,8 +7360,7 @@ static int remove_and_add_spares(struct mddev *mddev)
spares++;
md_new_event(mddev);
set_bit(MD_CHANGE_DEVS, &mddev->flags);
- } else
- break;
+ }
}
}
}