From: NeilBrown Date: Thu, 28 Jul 2011 01:39:25 +0000 (+1000) Subject: md/raid10: simplify read error handling during recovery. X-Git-Tag: firefly_0821_release~3680^2~4823^2~2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e684e41db3bad44f1262341300b827c0d94ae220;p=firefly-linux-kernel-4.4.55.git md/raid10: simplify read error handling during recovery. If a read error is detected during recovery the code currently fails the read device. This isn't really necessary. recovery_request_write will signal a write error to end_sync_write and it will record a write error on the destination device which will record a bad block there or kick it from the array. So just remove this call to do md_error. Signed-off-by: NeilBrown --- diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index e54ff3274eda..6022e2aaf3aa 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -1418,13 +1418,12 @@ static void end_sync_read(struct bio *bio, int error) if (test_bit(BIO_UPTODATE, &bio->bi_flags)) set_bit(R10BIO_Uptodate, &r10_bio->state); - else { + else + /* The write handler will notice the lack of + * R10BIO_Uptodate and record any errors etc + */ atomic_add(r10_bio->sectors, &conf->mirrors[d].rdev->corrected_errors); - if (!test_bit(MD_RECOVERY_SYNC, &conf->mddev->recovery)) - md_error(r10_bio->mddev, - conf->mirrors[d].rdev); - } /* for reconstruct, we always reschedule after a read. * for resync, only after all reads