diff options
Diffstat (limited to 'fs/btrfs/backref.c')
| -rw-r--r-- | fs/btrfs/backref.c | 29 | 
1 files changed, 12 insertions, 17 deletions
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 79336fa853db..b7d54efb4728 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -3373,7 +3373,6 @@ int btrfs_backref_add_tree_node(struct btrfs_backref_cache *cache,  				struct btrfs_key *node_key,  				struct btrfs_backref_node *cur)  { -	struct btrfs_fs_info *fs_info = cache->fs_info;  	struct btrfs_backref_edge *edge;  	struct btrfs_backref_node *exist;  	int ret; @@ -3462,25 +3461,21 @@ int btrfs_backref_add_tree_node(struct btrfs_backref_cache *cache,  			ret = handle_direct_tree_backref(cache, &key, cur);  			if (ret < 0)  				goto out; -			continue; -		} else if (unlikely(key.type == BTRFS_EXTENT_REF_V0_KEY)) { -			ret = -EINVAL; -			btrfs_print_v0_err(fs_info); -			btrfs_handle_fs_error(fs_info, ret, NULL); -			goto out; -		} else if (key.type != BTRFS_TREE_BLOCK_REF_KEY) { -			continue; +		} else if (key.type == BTRFS_TREE_BLOCK_REF_KEY) { +			/* +			 * key.type == BTRFS_TREE_BLOCK_REF_KEY, inline ref +			 * offset means the root objectid. We need to search +			 * the tree to get its parent bytenr. +			 */ +			ret = handle_indirect_tree_backref(cache, path, &key, node_key, +							   cur); +			if (ret < 0) +				goto out;  		} -  		/* -		 * key.type == BTRFS_TREE_BLOCK_REF_KEY, inline ref offset -		 * means the root objectid. We need to search the tree to get -		 * its parent bytenr. +		 * Unrecognized tree backref items (if it can pass tree-checker) +		 * would be ignored.  		 */ -		ret = handle_indirect_tree_backref(cache, path, &key, node_key, -						   cur); -		if (ret < 0) -			goto out;  	}  	ret = 0;  	cur->checked = 1;  | 
