Sasha Levin <sashal@xxxxxxxxxx> 于2018年11月1日周四 上午12:45写道: > > From: Shaohua Li <shli@xxxxxx> > > [ 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@xxxxxxxxxxxxxxxx> > Tested-by: Gioh Kim <gi-oh.kim@xxxxxxxxxxxxxxxx> > Acked-by: Guoqing Jiang <gqjiang@xxxxxxxx>9e753ba9b9b405e3902d9f08aec5f2ea58a0c317 > Signed-off-by: Shaohua Li <shli@xxxxxx> > Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx> 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 >