Btrfs: deal with read errors on extent buffers differently
authorJosef Bacik <josef@redhat.com>
Tue, 27 Mar 2012 01:57:36 +0000 (21:57 -0400)
committerChris Mason <chris.mason@oracle.com>
Tue, 27 Mar 2012 01:57:36 +0000 (21:57 -0400)
commitea466794084f55d8fcc100711cf17923bf57e962
tree9905d556655ff0f036936ea51f9aa214bd2cbce8
parentf3f266ab1bfe4770375d24fa8e72a03278e9450a
Btrfs: deal with read errors on extent buffers differently

Since we need to read and write extent buffers in their entirety we can't use
the normal bio_readpage_error stuff since it only works on a per page basis.  So
instead make it so that if we see an io error in endio we just mark the eb as
having an IO error and then in btree_read_extent_buffer_pages we will manually
try other mirrors and then overwrite the bad mirror if we find a good copy.
This works with larger than page size blocks.  Thanks,

Signed-off-by: Josef Bacik <josef@redhat.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/disk-io.c
fs/btrfs/extent_io.c
fs/btrfs/extent_io.h