]> Pileus Git - ~andy/linux/commitdiff
Btrfs: support root level changes in __resolve_indirect_ref
authorJan Schmidt <list.btrfs@jan-o-sch.net>
Wed, 27 Jun 2012 13:23:09 +0000 (15:23 +0200)
committerJan Schmidt <list.btrfs@jan-o-sch.net>
Wed, 27 Jun 2012 14:34:38 +0000 (16:34 +0200)
With the tree mod log, we can have a tree that's two levels high, but
btrfs_search_old_slot may still return a path with the tree root at level
one instead. __resolve_indirect_ref must care for this and accept parents in
a lower level than expected.

Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
fs/btrfs/backref.c

index 7301cdb4b2cb3cf6c5d8626b2275a85f88d4f55f..cf0df904347fb3ca5d1f3c0825bf18185db18f10 100644 (file)
@@ -301,10 +301,14 @@ static int __resolve_indirect_ref(struct btrfs_fs_info *fs_info,
                goto out;
 
        eb = path->nodes[level];
-       if (!eb) {
-               WARN_ON(1);
-               ret = 1;
-               goto out;
+       while (!eb) {
+               if (!level) {
+                       WARN_ON(1);
+                       ret = 1;
+                       goto out;
+               }
+               level--;
+               eb = path->nodes[level];
        }
 
        ret = add_all_parents(root, path, parents, level, &ref->key_for_search,