diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index d8957d74fd25..4602fc57c961 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -1519,7 +1519,8 @@ static int fix_sync_read_error(struct r1bio *r1_bio) abort = 1; } if (abort) { - mddev->recovery_disabled = 1; + conf->recovery_disabled = + mddev->recovery_disabled; set_bit(MD_RECOVERY_INTR, &mddev->recovery); md_done_sync(mddev, r1_bio->sectors, 0); put_buf(r1_bio); @@ -2436,6 +2437,7 @@ static struct r1conf *setup_conf(struct mddev *mddev) bio_list_init(&conf->pending_bio_list); conf->pending_count = 0; + conf->recovery_disabled = mddev->recovery_disabled - 1; conf->last_used = -1; for (i = 0; i < conf->raid_disks; i++) { diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 9496463ca5df..132c18ef8665 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -1373,6 +1373,7 @@ static int raid10_add_disk(struct mddev *mddev, struct md_rdev *rdev) } p->head_position = 0; + p->recovery_disabled = mddev->recovery_disabled - 1; rdev->raid_disk = mirror; err = 0; if (rdev->saved_raid_disk != mirror) @@ -2931,6 +2932,7 @@ static int run(struct mddev *mddev) if (disk->rdev) conf->fullsync = 1; } + disk->recovery_disabled = mddev->recovery_disabled - 1; } if (mddev->recovery_cp != MaxSector) diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 521bf2605f82..f6fe053a5bed 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -4591,6 +4591,7 @@ static struct r5conf *setup_conf(struct mddev *mddev) atomic_set(&conf->preread_active_stripes, 0); atomic_set(&conf->active_aligned_reads, 0); conf->bypass_threshold = BYPASS_THRESHOLD; + conf->recovery_disabled = mddev->recovery_disabled - 1; conf->raid_disks = mddev->raid_disks; if (mddev->reshape_position == MaxSector)