diff options
author | NeilBrown <neilb@suse.de> | 2013-07-17 00:55:31 -0400 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-07-18 00:18:03 -0400 |
commit | 5024c298311f3b97c85cb034f9edaa333fdb9338 (patch) | |
tree | df85cc8793fc556722e1ef4613227381120b6412 | |
parent | 7bb23c4934059c64cbee2e41d5d24ce122285176 (diff) |
md: Remove recent change which allows devices to skip recovery.
commit 7ceb17e87bde79d285a8b988cfed9eaeebe60b86
md: Allow devices to be re-added to a read-only array.
allowed a bit more than just that. It also allows devices to be added
to a read-write array and to end up skipping recovery.
This patch removes the offending piece of code pending a rewrite for a
subsequent release.
More specifically:
If the array has a bitmap, then the device will still need a bitmap
based resync ('saved_raid_disk' is set under different conditions
is a bitmap is present).
If the array doesn't have a bitmap, then this is correct as long as
nothing has been written to the array since the metadata was checked
by ->validate_super. However there is no locking to ensure that there
was no write.
Bug was introduced in 3.10 and causes data corruption so
patch is suitable for 3.10-stable.
Cc: stable@vger.kernel.org (3.10)
Reported-by: Joe Lawrence <joe.lawrence@stratus.com>
Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r-- | drivers/md/md.c | 14 |
1 files changed, 0 insertions, 14 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index dddc87bcf64a..9f13e13506ef 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -7716,20 +7716,6 @@ static int remove_and_add_spares(struct mddev *mddev, | |||
7716 | continue; | 7716 | continue; |
7717 | 7717 | ||
7718 | rdev->recovery_offset = 0; | 7718 | rdev->recovery_offset = 0; |
7719 | if (rdev->saved_raid_disk >= 0 && mddev->in_sync) { | ||
7720 | spin_lock_irq(&mddev->write_lock); | ||
7721 | if (mddev->in_sync) | ||
7722 | /* OK, this device, which is in_sync, | ||
7723 | * will definitely be noticed before | ||
7724 | * the next write, so recovery isn't | ||
7725 | * needed. | ||
7726 | */ | ||
7727 | rdev->recovery_offset = mddev->recovery_cp; | ||
7728 | spin_unlock_irq(&mddev->write_lock); | ||
7729 | } | ||
7730 | if (mddev->ro && rdev->recovery_offset != MaxSector) | ||
7731 | /* not safe to add this disk now */ | ||
7732 | continue; | ||
7733 | if (mddev->pers-> | 7719 | if (mddev->pers-> |
7734 | hot_add_disk(mddev, rdev) == 0) { | 7720 | hot_add_disk(mddev, rdev) == 0) { |
7735 | if (sysfs_link_rdev(mddev, rdev)) | 7721 | if (sysfs_link_rdev(mddev, rdev)) |