Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7e83ccbe authored by Martin Wilck's avatar Martin Wilck Committed by NeilBrown
Browse files

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: default avatarMartin Wilck <mwilck@arcor.de>
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent b6fec069
Loading
Loading
Loading
Loading
+16 −0
Original line number Original line Diff line number Diff line
@@ -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) ||