summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
authorChris Mason2008-04-09 22:28:12 +0200
committerChris Mason2008-09-25 17:04:01 +0200
commitf188591e987e21b6f7f8864c66a02858b95b530e (patch)
tree996f04b7c8d1e8a626b123e7a2a217992d705c60 /fs/btrfs/inode.c
parentBtrfs: Handle data block end_io through the async work queue (diff)
downloadkernel-qcow2-linux-f188591e987e21b6f7f8864c66a02858b95b530e.tar.gz
kernel-qcow2-linux-f188591e987e21b6f7f8864c66a02858b95b530e.tar.xz
kernel-qcow2-linux-f188591e987e21b6f7f8864c66a02858b95b530e.zip
Btrfs: Retry metadata reads in the face of checksum failures
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index e1ef1acdb350..8c2d5d036bd6 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -314,7 +314,7 @@ int btrfs_merge_bio_hook(struct page *page, unsigned long offset,
map_tree = &root->fs_info->mapping_tree;
map_length = length;
ret = btrfs_map_block(map_tree, READ, logical,
- &map_length, NULL);
+ &map_length, NULL, 0);
if (map_length < length + size) {
return 1;
@@ -322,7 +322,8 @@ int btrfs_merge_bio_hook(struct page *page, unsigned long offset,
return 0;
}
-int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio)
+int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio,
+ int mirror_num)
{
struct btrfs_root *root = BTRFS_I(inode)->root;
struct btrfs_trans_handle *trans;
@@ -347,7 +348,7 @@ int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio)
BUG_ON(ret);
mutex_unlock(&root->fs_info->fs_mutex);
mapit:
- return btrfs_map_bio(root, rw, bio);
+ return btrfs_map_bio(root, rw, bio, mirror_num);
}
int btrfs_readpage_io_hook(struct page *page, u64 start, u64 end)