diff options
| author | Liu Bo <liub.liubo@gmail.com> | 2012-09-07 20:01:28 -0600 | 
|---|---|---|
| committer | Chris Mason <chris.mason@fusionio.com> | 2012-10-01 15:19:18 -0400 | 
| commit | 69917e431210f8712fe050f47b7561e7dae89521 (patch) | |
| tree | 52a81d3c70d3a768d2d7756984dd16898ce12e50 /fs/btrfs/send.c | |
| parent | dea7d76ecbfb53cda6aadd9bed33e87d255c5b02 (diff) | |
| download | olio-linux-3.10-69917e431210f8712fe050f47b7561e7dae89521.tar.xz olio-linux-3.10-69917e431210f8712fe050f47b7561e7dae89521.zip  | |
Btrfs: fix a bug in parsing return value in logical resolve
In logical resolve, we parse extent_from_logical()'s 'ret' as a kind of flag.
It is possible to lose our errors because
(-EXXXX & BTRFS_EXTENT_FLAG_TREE_BLOCK) is true.
I'm not sure if it is on purpose, it just looks too hacky if it is.
I'd rather use a real flag and a 'ret' to catch errors.
Acked-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
Signed-off-by: Liu Bo <liub.liubo@gmail.com>
Diffstat (limited to 'fs/btrfs/send.c')
| -rw-r--r-- | fs/btrfs/send.c | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index e5c867996aa..c6ef070a8dc 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -1152,6 +1152,7 @@ static int find_extent_clone(struct send_ctx *sctx,  	u64 disk_byte;  	u64 num_bytes;  	u64 extent_item_pos; +	u64 flags = 0;  	struct btrfs_file_extent_item *fi;  	struct extent_buffer *eb = path->nodes[0];  	struct backref_ctx *backref_ctx = NULL; @@ -1198,13 +1199,13 @@ static int find_extent_clone(struct send_ctx *sctx,  	}  	logical = disk_byte + btrfs_file_extent_offset(eb, fi); -	ret = extent_from_logical(sctx->send_root->fs_info, -			disk_byte, tmp_path, &found_key); +	ret = extent_from_logical(sctx->send_root->fs_info, disk_byte, tmp_path, +				  &found_key, &flags);  	btrfs_release_path(tmp_path);  	if (ret < 0)  		goto out; -	if (ret & BTRFS_EXTENT_FLAG_TREE_BLOCK) { +	if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) {  		ret = -EIO;  		goto out;  	}  |