| From 75dbb8f2060fb03b5e1e203e62c87e733c90643d Mon Sep 17 00:00:00 2001 |
| From: NeilBrown <neilb@suse.de> |
| Date: Wed, 12 Jan 2011 09:03:35 +1100 |
| Subject: [PATCH] md: fix regression with re-adding devices to arrays with no |
| metadata |
| |
| commit bf572541ab44240163eaa2d486b06f306a31d45a upstream. |
| |
| Commit 1a855a0606 (2.6.37-rc4) fixed a problem where devices were |
| re-added when they shouldn't be but caused a regression in a less |
| common case that means sometimes devices cannot be re-added when they |
| should be. |
| |
| In particular, when re-adding a device to an array without metadata |
| we should always access the device, but after the above commit we |
| didn't. |
| |
| This patch sets the In_sync flag in that case so that the re-add |
| succeeds. |
| |
| This patch is suitable for any -stable kernel to which 1a855a0606 was |
| applied. |
| |
| Signed-off-by: NeilBrown <neilb@suse.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/md/md.c b/drivers/md/md.c |
| index e56e35e..7db9ceb 100644 |
| --- a/drivers/md/md.c |
| +++ b/drivers/md/md.c |
| @@ -5008,9 +5008,10 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info) |
| /* set saved_raid_disk if appropriate */ |
| if (!mddev->persistent) { |
| if (info->state & (1<<MD_DISK_SYNC) && |
| - info->raid_disk < mddev->raid_disks) |
| + info->raid_disk < mddev->raid_disks) { |
| rdev->raid_disk = info->raid_disk; |
| - else |
| + set_bit(In_sync, &rdev->flags); |
| + } else |
| rdev->raid_disk = -1; |
| } else |
| super_types[mddev->major_version]. |
| -- |
| 1.7.4.4 |
| |