Btrfs: don't check nodes for extent items
authorJosef Bacik <jbacik@fb.com>
Thu, 5 Jun 2014 20:08:45 +0000 (16:08 -0400)
committerChris Mason <clm@fb.com>
Tue, 10 Jun 2014 00:21:14 +0000 (17:21 -0700)
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>
fs/btrfs/backref.c

index f09aa18ab7101499d6a3cee7b234be6d74072a19..84d0912eecb2c0f0c64764b303cbe1f216610746 100644 (file)
@@ -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)) {