Re: [PATCH] RAID10: Allow skipping recovery when clean arrays are assembled
From: NeilBrown <hidden>
Date: 2013-03-19 23:46:57
Attachments
- signature.asc [application/pgp-signature] 828 bytes
From: NeilBrown <hidden>
Date: 2013-03-19 23:46:57
On Tue, 19 Mar 2013 19:35:33 +0100 mwilck@arcor.de wrote:
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 <redacted> --- drivers/md/raid10.c | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-)diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 64d4824..e373d88 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c@@ -2863,6 +2863,22 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr, if (init_resync(conf)) 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: max_sector = mddev->dev_sectors; if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
applied, thanks. NeilBrown