aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/raid10.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 77b562d18a90..2372926dc559 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -2913,6 +2913,22 @@ static sector_t sync_request(struct mddev *mddev, sector_t sector_nr,
2913 if (init_resync(conf)) 2913 if (init_resync(conf))
2914 return 0; 2914 return 0;
2915 2915
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
2916 skipped: 2932 skipped:
2917 max_sector = mddev->dev_sectors; 2933 max_sector = mddev->dev_sectors;
2918 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) || 2934 if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||