summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosef Bacik <jbacik@fb.com>2014-06-05 22:08:45 +0200
committerChris Mason <clm@fb.com>2014-06-10 02:21:14 +0200
commit8a56457f5f8fa7c2698ffae8545214c5b96a2cb5 (patch)
treeb753f0914525e7bfe712d140e698ea81d29f6d3d
parentBtrfs: don't release invalid page in btrfs_page_exists_in_range() (diff)
downloadlinux-8a56457f5f8fa7c2698ffae8545214c5b96a2cb5.tar.xz
linux-8a56457f5f8fa7c2698ffae8545214c5b96a2cb5.zip
Btrfs: don't check nodes for extent items
The backref code was looking at nodes as well as leaves when we tried to populate extent item entries. This is not good, and although we go away with it for the most part because we'd skip where disk_bytenr != random_memory, sometimes random_memory would match and suddenly boom. This fixes that problem. Thanks, Signed-off-by: Josef Bacik <jbacik@fb.com> Signed-off-by: Chris Mason <clm@fb.com>
-rw-r--r--fs/btrfs/backref.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
index f09aa18ab710..84d0912eecb2 100644
--- a/fs/btrfs/backref.c
+++ b/fs/btrfs/backref.c
@@ -988,11 +988,12 @@ again:
goto out;
}
if (ref->count && ref->parent) {
- if (extent_item_pos && !ref->inode_list) {
+ if (extent_item_pos && !ref->inode_list &&
+ ref->level == 0) {
u32 bsz;
struct extent_buffer *eb;
bsz = btrfs_level_size(fs_info->extent_root,
- info_level);
+ ref->level);
eb = read_tree_block(fs_info->extent_root,
ref->parent, bsz, 0);
if (!eb || !extent_buffer_uptodate(eb)) {