mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
md: revert incorrect fix for read error handling in raid1.
commit4706b349f
was a forward port of a fix that was needed for SLES10. But in fact it is not needed in mainline because the earlier commitdd00a99e7a
fixes the same problem in a better way. Further, this commit introduces a bug in the way it interacts with the automatic read-error-correction. If, after a read error is successfully corrected, the same disk is chosen to re-read - the re-read won't be attempted but an error will be returned instead. After reverting that commit, there is the possibility that a read error on a read-only array (where read errors cannot be corrected as that requires a write) will repeatedly read the same device and continue to get an error. So in the "Array is readonly" case, fail the drive immediately on a read error. Signed-off-by: NeilBrown <neilb@suse.de> Cc: stable@kernel.org
This commit is contained in:
parent
a9366e61b0
commit
d0e260782c
1 changed files with 4 additions and 3 deletions
|
@ -1650,11 +1650,12 @@ static void raid1d(mddev_t *mddev)
|
|||
r1_bio->sector,
|
||||
r1_bio->sectors);
|
||||
unfreeze_array(conf);
|
||||
}
|
||||
} else
|
||||
md_error(mddev,
|
||||
conf->mirrors[r1_bio->read_disk].rdev);
|
||||
|
||||
bio = r1_bio->bios[r1_bio->read_disk];
|
||||
if ((disk=read_balance(conf, r1_bio)) == -1 ||
|
||||
disk == r1_bio->read_disk) {
|
||||
if ((disk=read_balance(conf, r1_bio)) == -1) {
|
||||
printk(KERN_ALERT "raid1: %s: unrecoverable I/O"
|
||||
" read error for block %llu\n",
|
||||
bdevname(bio->bi_bdev,b),
|
||||
|
|
Loading…
Reference in a new issue