|
@@ -1859,7 +1859,9 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
|
|
|
|
|
|
rdev = conf->mirrors[d].rdev;
|
|
|
if (rdev &&
|
|
|
- test_bit(In_sync, &rdev->flags) &&
|
|
|
+ (test_bit(In_sync, &rdev->flags) ||
|
|
|
+ (!test_bit(Faulty, &rdev->flags) &&
|
|
|
+ rdev->recovery_offset >= sect + s)) &&
|
|
|
is_badblock(rdev, sect, s,
|
|
|
&first_bad, &bad_sectors) == 0 &&
|
|
|
sync_page_io(rdev, sect, s<<9,
|