Btrfs: fix that repair code is spuriously executed for transid failures
authorStefan Behrens <sbehrens@giantdisaster.de>
Fri, 10 Aug 2012 14:58:21 +0000 (08:58 -0600)
committerChris Mason <chris.mason@oracle.com>
Tue, 28 Aug 2012 20:53:43 +0000 (16:53 -0400)
commit256dd1bb3750ac5ad49b40887c1691788dc44b33
treed260aa607397dd2e67681b4b264585be3032e9d9
parentd280e5be940931c84bb2e9831ead9d02bc785484
Btrfs: fix that repair code is spuriously executed for transid failures

If verify_parent_transid() fails for all mirrors, the current code
calls repair_io_failure() anyway which means:
- that the disk block is rewritten without repairing anything and
- that a kernel log message is printed which misleadingly claims
  that a read error was corrected.

This is an example:
parent transid verify failed on 615015833600 wanted 110423 found 110424
parent transid verify failed on 615015833600 wanted 110423 found 110424
btrfs read error corrected: ino 1 off 615015833600 (dev /dev/...)

It is wrong to ignore the results from verify_parent_transid() and to
call repair_eb_io_failure() when the verification of the transids failed.
This commit fixes the issue.

Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/disk-io.c