md: fix regression with re-adding devices to arrays with no metadata
Commit1a855a0606
(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 which1a855a0606
was applied. Cc: stable@kernel.org Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
3c0eee3fe6
commit
bf572541ab
1 changed files with 3 additions and 2 deletions
|
@ -5159,9 +5159,10 @@ static int add_new_disk(mddev_t * mddev, mdu_disk_info_t *info)
|
||||||
/* set saved_raid_disk if appropriate */
|
/* set saved_raid_disk if appropriate */
|
||||||
if (!mddev->persistent) {
|
if (!mddev->persistent) {
|
||||||
if (info->state & (1<<MD_DISK_SYNC) &&
|
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;
|
rdev->raid_disk = info->raid_disk;
|
||||||
else
|
set_bit(In_sync, &rdev->flags);
|
||||||
|
} else
|
||||||
rdev->raid_disk = -1;
|
rdev->raid_disk = -1;
|
||||||
} else
|
} else
|
||||||
super_types[mddev->major_version].
|
super_types[mddev->major_version].
|
||||||
|
|
Loading…
Add table
Reference in a new issue