| From 8a56457f5f8fa7c2698ffae8545214c5b96a2cb5 Mon Sep 17 00:00:00 2001 |
| From: Josef Bacik <jbacik@fb.com> |
| Date: Thu, 5 Jun 2014 16:08:45 -0400 |
| Subject: Btrfs: don't check nodes for extent items |
| |
| From: Josef Bacik <jbacik@fb.com> |
| |
| commit 8a56457f5f8fa7c2698ffae8545214c5b96a2cb5 upstream. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/btrfs/backref.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/fs/btrfs/backref.c |
| +++ b/fs/btrfs/backref.c |
| @@ -972,11 +972,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)) { |