summaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2014-01-14 05:55:14 +0100
committerNeilBrown <neilb@suse.de>2014-01-14 06:44:21 +0100
commit7eb418851f3278de67126ea0c427641ab4792c57 (patch)
tree6faa679f307ec0d333765bc87baa50021ebd9959 /drivers/md
parentmd: Change handling of save_raid_disk and metadata update during recovery. (diff)
downloadlinux-7eb418851f3278de67126ea0c427641ab4792c57.tar.xz
linux-7eb418851f3278de67126ea0c427641ab4792c57.zip
md: allow a partially recovered device to be hot-added to an array.
When adding a new device into an array it is normally important to clear any stale data from ->recovery_offset else the new device may not be recovered properly. However when re-adding a device which is known to be nearly in-sync, this is not needed and can be detrimental. The (bitmap-based) resync will still happen, and further recovery is only needed from where-ever it was already up to. So if save_raid_disk is set, signifying a re-add, don't clear ->recovery_offset. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/md.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 539f08885e7f..757e388308a8 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -7736,7 +7736,8 @@ static int remove_and_add_spares(struct mddev *mddev,
!test_bit(Bitmap_sync, &rdev->flags)))
continue;
- rdev->recovery_offset = 0;
+ if (rdev->saved_raid_disk < 0)
+ rdev->recovery_offset = 0;
if (mddev->pers->
hot_add_disk(mddev, rdev) == 0) {
if (sysfs_link_rdev(mddev, rdev))