From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756498AbXJOEgX (ORCPT ); Mon, 15 Oct 2007 00:36:23 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754544AbXJOEew (ORCPT ); Mon, 15 Oct 2007 00:34:52 -0400 Received: from ns2.suse.de ([195.135.220.15]:51161 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754376AbXJOEeu (ORCPT ); Mon, 15 Oct 2007 00:34:50 -0400 From: NeilBrown To: Andrew Morton Date: Mon, 15 Oct 2007 14:34:43 +1000 Message-Id: <1071015043443.5517@suse.de> X-face: [Gw_3E*Gng}4rRrKRYotwlE?.2|**#s9D Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org 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 ### Diffstat output ./drivers/md/raid1.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff .prev/drivers/md/raid1.c ./drivers/md/raid1.c --- .prev/drivers/md/raid1.c 2007-10-15 14:07:17.000000000 +1000 +++ ./drivers/md/raid1.c 2007-10-15 14:08:55.000000000 +1000 @@ -1214,7 +1214,8 @@ static void sync_request_write(mddev_t * 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 {