|
@@ -612,6 +612,7 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
|
|
|
int found_level;
|
|
|
struct extent_buffer *eb;
|
|
|
struct btrfs_root *root = BTRFS_I(page->mapping->host)->root;
|
|
|
+ struct btrfs_fs_info *fs_info = root->fs_info;
|
|
|
int ret = 0;
|
|
|
int reads_done;
|
|
|
|
|
@@ -637,21 +638,21 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
|
|
|
|
|
|
found_start = btrfs_header_bytenr(eb);
|
|
|
if (found_start != eb->start) {
|
|
|
- btrfs_err_rl(eb->fs_info, "bad tree block start %llu %llu",
|
|
|
- found_start, eb->start);
|
|
|
+ btrfs_err_rl(fs_info, "bad tree block start %llu %llu",
|
|
|
+ found_start, eb->start);
|
|
|
ret = -EIO;
|
|
|
goto err;
|
|
|
}
|
|
|
- if (check_tree_block_fsid(root->fs_info, eb)) {
|
|
|
- btrfs_err_rl(eb->fs_info, "bad fsid on block %llu",
|
|
|
- eb->start);
|
|
|
+ if (check_tree_block_fsid(fs_info, eb)) {
|
|
|
+ btrfs_err_rl(fs_info, "bad fsid on block %llu",
|
|
|
+ eb->start);
|
|
|
ret = -EIO;
|
|
|
goto err;
|
|
|
}
|
|
|
found_level = btrfs_header_level(eb);
|
|
|
if (found_level >= BTRFS_MAX_LEVEL) {
|
|
|
- btrfs_err(root->fs_info, "bad tree block level %d",
|
|
|
- (int)btrfs_header_level(eb));
|
|
|
+ btrfs_err(fs_info, "bad tree block level %d",
|
|
|
+ (int)btrfs_header_level(eb));
|
|
|
ret = -EIO;
|
|
|
goto err;
|
|
|
}
|
|
@@ -659,7 +660,7 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
|
|
|
btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb),
|
|
|
eb, found_level);
|
|
|
|
|
|
- ret = csum_tree_block(root->fs_info, eb, 1);
|
|
|
+ ret = csum_tree_block(fs_info, eb, 1);
|
|
|
if (ret) {
|
|
|
ret = -EIO;
|
|
|
goto err;
|
|
@@ -680,7 +681,7 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
|
|
|
err:
|
|
|
if (reads_done &&
|
|
|
test_and_clear_bit(EXTENT_BUFFER_READAHEAD, &eb->bflags))
|
|
|
- btree_readahead_hook(root, eb, eb->start, ret);
|
|
|
+ btree_readahead_hook(fs_info, eb, eb->start, ret);
|
|
|
|
|
|
if (ret) {
|
|
|
/*
|
|
@@ -699,14 +700,13 @@ out:
|
|
|
static int btree_io_failed_hook(struct page *page, int failed_mirror)
|
|
|
{
|
|
|
struct extent_buffer *eb;
|
|
|
- struct btrfs_root *root = BTRFS_I(page->mapping->host)->root;
|
|
|
|
|
|
eb = (struct extent_buffer *)page->private;
|
|
|
set_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags);
|
|
|
eb->read_mirror = failed_mirror;
|
|
|
atomic_dec(&eb->io_pages);
|
|
|
if (test_and_clear_bit(EXTENT_BUFFER_READAHEAD, &eb->bflags))
|
|
|
- btree_readahead_hook(root, eb, eb->start, -EIO);
|
|
|
+ btree_readahead_hook(eb->fs_info, eb, eb->start, -EIO);
|
|
|
return -EIO; /* we fixed nothing */
|
|
|
}
|
|
|
|