diff options
Diffstat (limited to 'fs/btrfs/disk-io.c')
| -rw-r--r-- | fs/btrfs/disk-io.c | 23 | 
1 files changed, 12 insertions, 11 deletions
| diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 294c77729df3..de68b8b61fd2 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -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 */  } @@ -2604,6 +2604,7 @@ int open_ctree(struct super_block *sb,  	atomic_set(&fs_info->nr_async_bios, 0);  	atomic_set(&fs_info->defrag_running, 0);  	atomic_set(&fs_info->qgroup_op_seq, 0); +	atomic_set(&fs_info->reada_works_cnt, 0);  	atomic64_set(&fs_info->tree_mod_seq, 0);  	fs_info->sb = sb;  	fs_info->max_inline = BTRFS_DEFAULT_MAX_INLINE; | 

