Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit 7e83ccb

Browse files
mwilckneilbrown
authored andcommitted
md/raid10: Allow skipping recovery when clean arrays are assembled
When an array is assembled incrementally with mdadm -I -R and the array switches to "active" mode, md starts a recovery. If the array was clean, the "fullsync" flag will be 0. Skip the full recovery in this case, as RAID1 does (the code was actually copied from the sync_request() method of RAID1). Signed-off-by: Martin Wilck <[email protected]> Signed-off-by: NeilBrown <[email protected]>
1 parent b6fec06 commit 7e83ccb

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

drivers/md/raid10.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2913,6 +2913,22 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr,
29132913
if (init_resync(conf))
29142914
return 0;
29152915

2916+
/*
2917+
* Allow skipping a full rebuild for incremental assembly
2918+
* of a clean array, like RAID1 does.
2919+
*/
2920+
if (mddev->bitmap == NULL &&
2921+
mddev->recovery_cp == MaxSector &&
2922+
!test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) &&
2923+
conf->fullsync == 0) {
2924+
*skipped = 1;
2925+
max_sector = mddev->dev_sectors;
2926+
if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
2927+
test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
2928+
max_sector = mddev->resync_max_sectors;
2929+
return max_sector - sector_nr;
2930+
}
2931+
29162932
skipped:
29172933
max_sector = mddev->dev_sectors;
29182934
if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||

0 commit comments

Comments
 (0)