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 <mwilck@arcor.de> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Родитель
b6fec069af
Коммит
7e83ccbecd
|
@ -2913,6 +2913,22 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr,
|
||||||
if (init_resync(conf))
|
if (init_resync(conf))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allow skipping a full rebuild for incremental assembly
|
||||||
|
* of a clean array, like RAID1 does.
|
||||||
|
*/
|
||||||
|
if (mddev->bitmap == NULL &&
|
||||||
|
mddev->recovery_cp == MaxSector &&
|
||||||
|
!test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) &&
|
||||||
|
conf->fullsync == 0) {
|
||||||
|
*skipped = 1;
|
||||||
|
max_sector = mddev->dev_sectors;
|
||||||
|
if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
|
||||||
|
test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
|
||||||
|
max_sector = mddev->resync_max_sectors;
|
||||||
|
return max_sector - sector_nr;
|
||||||
|
}
|
||||||
|
|
||||||
skipped:
|
skipped:
|
||||||
max_sector = mddev->dev_sectors;
|
max_sector = mddev->dev_sectors;
|
||||||
if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
|
if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
|
||||||
|
|
Загрузка…
Ссылка в новой задаче