Skip to content

Commit 9e753ba

Browse files
committed
MD: fix invalid stored role for a disk - try2
Commit d595567 (MD: fix invalid stored role for a disk) broke linear hotadd. Let's only fix the role for disks in raid1/10. Based on Guoqing's original patch. Reported-by: kernel test robot <[email protected]> Cc: Gioh Kim <[email protected]> Cc: Guoqing Jiang <[email protected]> Signed-off-by: Shaohua Li <[email protected]>
1 parent f8f83d8 commit 9e753ba

File tree

3 files changed

+2
-4
lines changed

3 files changed

+2
-4
lines changed

drivers/md/md.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1774,10 +1774,6 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev)
17741774
} else
17751775
set_bit(In_sync, &rdev->flags);
17761776
rdev->raid_disk = role;
1777-
if (role >= mddev->raid_disks) {
1778-
rdev->saved_raid_disk = -1;
1779-
rdev->raid_disk = -1;
1780-
}
17811777
break;
17821778
}
17831779
if (sb->devflags & WriteMostly1)

drivers/md/raid1.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1734,6 +1734,7 @@ static int raid1_add_disk(struct mddev *mddev, struct md_rdev *rdev)
17341734
*/
17351735
if (rdev->saved_raid_disk >= 0 &&
17361736
rdev->saved_raid_disk >= first &&
1737+
rdev->saved_raid_disk < conf->raid_disks &&
17371738
conf->mirrors[rdev->saved_raid_disk].rdev == NULL)
17381739
first = last = rdev->saved_raid_disk;
17391740

drivers/md/raid10.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1808,6 +1808,7 @@ static int raid10_add_disk(struct mddev *mddev, struct md_rdev *rdev)
18081808
first = last = rdev->raid_disk;
18091809

18101810
if (rdev->saved_raid_disk >= first &&
1811+
rdev->saved_raid_disk < conf->geo.raid_disks &&
18111812
conf->mirrors[rdev->saved_raid_disk].rdev == NULL)
18121813
mirror = rdev->saved_raid_disk;
18131814
else

0 commit comments

Comments
 (0)