Re: [PATCH AUTOSEL 4.19 118/146] MD: fix invalid stored role for a disk

Jack Wang
2018-11-06T07:37:48Z

Sasha Levin <sashal@kernel.org> 于2018年11月1日周四 上午12:45写道：
>
> From: Shaohua Li <shli@fb.com>
>
> [ Upstream commit d595567dc4f0c1d90685ec1e2e296e2cad2643ac ]
>
> If we change the number of array's device after device is removed from array,
> then add the device back to array, we can see that device is added as active
> role instead of spare which we expected.
>
> Please see the below link for details:
> https://marc.info/?l=linux-raid&m=153736982015076&w=2
>
> This is caused by that we prefer to use device's previous role which is
> recorded by saved_raid_disk, but we should respect the new number of
> conf->raid_disks since it could be changed after device is removed.
>
> Reported-by: Gioh Kim <gi-oh.kim@profitbricks.com>
> Tested-by: Gioh Kim <gi-oh.kim@profitbricks.com>
> Acked-by: Guoqing Jiang <gqjiang@suse.com>9e753ba9b9b405e3902d9f08aec5f2ea58a0c317
> Signed-off-by: Shaohua Li <shli@fb.com>
> Signed-off-by: Sasha Levin <sashal@kernel.org>
Hi Sasha,

This patch breaks linear hotadd please also include commit
9e753ba9b9b405e3902d9f08aec5f2ea58a0c317
MD: fix invalid stored role for a disk - try2

Regards,
Jack Wang

> ---
> drivers/md/md.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index 8668793262d0..85459c17cc60 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -1776,6 +1776,10 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev)
> } else
> set_bit(In_sync, &rdev->flags);
> rdev->raid_disk = role;
> + if (role >= mddev->raid_disks) {
> + rdev->saved_raid_disk = -1;
> + rdev->raid_disk = -1;
> + }
> break;
> }
> if (sb->devflags & WriteMostly1)
> --
> 2.17.1
>