Skip to content

Commit

Permalink
Btrfs: bugfix in btrfs_find_parent_nodes
Browse files Browse the repository at this point in the history
That one has been around since the addition of backref.c. Due to the way we
calculate our slot numbers, after adding inline refs we're missing one keyed
ref unless it's located at the beginning of a new leaf.

Reported-by: Alexander Block <ablock84@googlemail.com>
Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
  • Loading branch information
Jan Schmidt committed May 26, 2012
1 parent cd1b413 commit dadcaf7
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions fs/btrfs/backref.c
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ static int __add_inline_refs(struct btrfs_fs_info *fs_info,
* enumerate all inline refs
*/
leaf = path->nodes[0];
slot = path->slots[0] - 1;
slot = path->slots[0];

item_size = btrfs_item_size_nr(leaf, slot);
BUG_ON(item_size < sizeof(*ei));
Expand Down Expand Up @@ -661,8 +661,9 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans,
struct extent_buffer *leaf;
int slot;

path->slots[0]--;
leaf = path->nodes[0];
slot = path->slots[0] - 1;
slot = path->slots[0];
btrfs_item_key_to_cpu(leaf, &key, slot);
if (key.objectid == bytenr &&
key.type == BTRFS_EXTENT_ITEM_KEY) {
Expand Down

0 comments on commit dadcaf7

Please sign in to comment.