diff options
author | Chris Mason <chris.mason@oracle.com> | 2008-04-09 16:28:12 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:04:01 -0400 |
commit | 7e38326f5b125288a2baea1d815c500502ab9fc0 (patch) | |
tree | c4e173e959c9d3a95b2eb66f8e88f4e2fa526d63 /fs/btrfs/extent_io.c | |
parent | f188591e987e21b6f7f8864c66a02858b95b530e (diff) |
Btrfs: Handle checksumming errors while reading data blocks
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/extent_io.c')
-rw-r--r-- | fs/btrfs/extent_io.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 2f159375c878..866460c3d72c 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c | |||
@@ -1534,6 +1534,15 @@ static int end_bio_extent_readpage(struct bio *bio, | |||
1534 | if (ret) | 1534 | if (ret) |
1535 | uptodate = 0; | 1535 | uptodate = 0; |
1536 | } | 1536 | } |
1537 | if (!uptodate && tree->ops && | ||
1538 | tree->ops->readpage_io_failed_hook) { | ||
1539 | ret = tree->ops->readpage_io_failed_hook(bio, page, | ||
1540 | start, end, state); | ||
1541 | if (ret == 0) { | ||
1542 | state = NULL; | ||
1543 | continue; | ||
1544 | } | ||
1545 | } | ||
1537 | 1546 | ||
1538 | spin_lock_irqsave(&tree->lock, flags); | 1547 | spin_lock_irqsave(&tree->lock, flags); |
1539 | if (!state || state->end != end) { | 1548 | if (!state || state->end != end) { |