path: root/file.c
diff options
authorQu Wenruo <>2018-06-06 15:27:13 +0800
committerDavid Sterba <>2018-08-06 15:00:34 +0200
commit3c042605db2238c09f56c197a58624d4e10c5d2e (patch)
tree16d840e1e8f861cb26e369a0e76b78e2ba599a53 /file.c
parent90b677a2d7e6b14e3047b5ac8625269378c1198f (diff)
btrfs-progs: Get rid of the confusing btrfs_file_extent_inline_len()
[BUG] If one uncompressed inline extent has incorrect ram_bytes, neither btrfs check nor dump-tree could detect such corruption. [CAUSE] Every caller tries to read inline extent ram_bytes is using btrfs_file_extent_inline_len(), other than directly calling btrfs_file_extent_ram_bytes(). For compressed extent, it's just calling btrfs_file_extent_ram_bytes(). However for uncompressed extent, it falls back to btrfs_file_extent_inline_item_len(), makes us unable to detect anything wrong in ram_bytes. [FIX] Just get rid of such confusing btrfs_file_extent_inline_len() function. Reported-by: Steve Leung <> Tested-by: Steve Leung <> Signed-off-by: Qu Wenruo <> Signed-off-by: David Sterba <>
Diffstat (limited to 'file.c')
1 files changed, 1 insertions, 2 deletions
diff --git a/file.c b/file.c
index f5e645c4..056be104 100644
--- a/file.c
+++ b/file.c
@@ -255,8 +255,7 @@ int btrfs_read_file(struct btrfs_root *root, u64 ino, u64 start, int len,
/* Inline extent, one inode should only one inline extent */
if (btrfs_file_extent_type(leaf, fi) ==
- extent_len = btrfs_file_extent_inline_len(leaf, slot,
- fi);
+ extent_len = btrfs_file_extent_ram_bytes(leaf, fi);
if (extent_start + extent_len <= start)
goto next;
read_extent_buffer(leaf, dest,