Commit 76b9e23d authored by Miao Xie's avatar Miao Xie Committed by Chris Mason

Btrfs: fix orphan backref nodes

If the root node of a fs/file tree is in the block group that is
being relocated, but the others are not in the other block groups.
when we create a snapshot for this tree between the relocation tree
creation ends and ->create_reloc_tree is set to 0, Btrfs will create
some backref nodes that are the lowest nodes of the backrefs cache.
But we forget to add them into ->leaves list of the backref cache
and deal with them, and at last, they will triggered BUG_ON().

  kernel BUG at fs/btrfs/relocation.c:239!

This patch fixes it by adding them into ->leaves list of backref cache.
Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 61b520a9
...@@ -1174,6 +1174,8 @@ static int clone_backref_node(struct btrfs_trans_handle *trans, ...@@ -1174,6 +1174,8 @@ static int clone_backref_node(struct btrfs_trans_handle *trans,
list_add_tail(&new_edge->list[UPPER], list_add_tail(&new_edge->list[UPPER],
&new_node->lower); &new_node->lower);
} }
} else {
list_add_tail(&new_node->lower, &cache->leaves);
} }
rb_node = tree_insert(&cache->rb_root, new_node->bytenr, rb_node = tree_insert(&cache->rb_root, new_node->bytenr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment