From: NeilBrown Date: Wed, 17 Oct 2007 06:30:55 +0000 (-0700) Subject: md: make sure read errors are auto-corrected during a 'check' resync in raid1 X-Git-Tag: v2.6.24-rc1~556 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cf7a44168d743ca97863b7f34ed42a45fd7b5ab0;p=linux-2.6 md: make sure read errors are auto-corrected during a 'check' resync in raid1 Whenever a read error is found, we should attempt to overwrite with correct data to 'fix' it. However when do a 'check' pass (which compares data blocks that are successfully read, but doesn't normally overwrite) we don't do that. We should. Signed-off-by: Neil Brown Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 0bcefad824..16775a0df7 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -1214,7 +1214,8 @@ static void sync_request_write(mddev_t *mddev, r1bio_t *r1_bio) j = 0; if (j >= 0) mddev->resync_mismatches += r1_bio->sectors; - if (j < 0 || test_bit(MD_RECOVERY_CHECK, &mddev->recovery)) { + if (j < 0 || (test_bit(MD_RECOVERY_CHECK, &mddev->recovery) + && test_bit(BIO_UPTODATE, &sbio->bi_flags))) { sbio->bi_end_io = NULL; rdev_dec_pending(conf->mirrors[i].rdev, mddev); } else {