diff options
Diffstat (limited to 'fs/btrfs/backref.c')
| -rw-r--r-- | fs/btrfs/backref.c | 13 | 
1 files changed, 10 insertions, 3 deletions
| diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 2d3e32ebfd15..8729cf68d2fe 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -1552,7 +1552,6 @@ int tree_backref_for_extent(unsigned long *ptr, struct extent_buffer *eb,  {  	int ret;  	int type; -	struct btrfs_tree_block_info *info;  	struct btrfs_extent_inline_ref *eiref;  	if (*ptr == (unsigned long)-1) @@ -1573,9 +1572,17 @@ int tree_backref_for_extent(unsigned long *ptr, struct extent_buffer *eb,  	}  	/* we can treat both ref types equally here */ -	info = (struct btrfs_tree_block_info *)(ei + 1);  	*out_root = btrfs_extent_inline_ref_offset(eb, eiref); -	*out_level = btrfs_tree_block_level(eb, info); + +	if (key->type == BTRFS_EXTENT_ITEM_KEY) { +		struct btrfs_tree_block_info *info; + +		info = (struct btrfs_tree_block_info *)(ei + 1); +		*out_level = btrfs_tree_block_level(eb, info); +	} else { +		ASSERT(key->type == BTRFS_METADATA_ITEM_KEY); +		*out_level = (u8)key->offset; +	}  	if (ret == 1)  		*ptr = (unsigned long)-1; | 
