mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
btrfs: remove clone_backref_node() from relocation
Since we no longer maintain backref cache across transactions, and this is only called when we're creating the reloc root for a newly created snapshot in the transaction critical section, we will end up doing a bunch of work that will just get thrown away when we start the transaction in the relocation loop. Delete this code as it no longer does anything for us. Reviewed-by: Boris Burkov <boris@bur.io> Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
551d04a32a
commit
0097422c0d
1 changed files with 1 additions and 90 deletions
|
@ -469,92 +469,6 @@ out:
|
|||
return node;
|
||||
}
|
||||
|
||||
/*
|
||||
* helper to add backref node for the newly created snapshot.
|
||||
* the backref node is created by cloning backref node that
|
||||
* corresponds to root of source tree
|
||||
*/
|
||||
static int clone_backref_node(struct btrfs_trans_handle *trans,
|
||||
struct reloc_control *rc,
|
||||
const struct btrfs_root *src,
|
||||
struct btrfs_root *dest)
|
||||
{
|
||||
struct btrfs_root *reloc_root = src->reloc_root;
|
||||
struct btrfs_backref_cache *cache = &rc->backref_cache;
|
||||
struct btrfs_backref_node *node = NULL;
|
||||
struct btrfs_backref_node *new_node;
|
||||
struct btrfs_backref_edge *edge;
|
||||
struct btrfs_backref_edge *new_edge;
|
||||
struct rb_node *rb_node;
|
||||
|
||||
rb_node = rb_simple_search(&cache->rb_root, src->commit_root->start);
|
||||
if (rb_node) {
|
||||
node = rb_entry(rb_node, struct btrfs_backref_node, rb_node);
|
||||
if (node->detached)
|
||||
node = NULL;
|
||||
else
|
||||
BUG_ON(node->new_bytenr != reloc_root->node->start);
|
||||
}
|
||||
|
||||
if (!node) {
|
||||
rb_node = rb_simple_search(&cache->rb_root,
|
||||
reloc_root->commit_root->start);
|
||||
if (rb_node) {
|
||||
node = rb_entry(rb_node, struct btrfs_backref_node,
|
||||
rb_node);
|
||||
BUG_ON(node->detached);
|
||||
}
|
||||
}
|
||||
|
||||
if (!node)
|
||||
return 0;
|
||||
|
||||
new_node = btrfs_backref_alloc_node(cache, dest->node->start,
|
||||
node->level);
|
||||
if (!new_node)
|
||||
return -ENOMEM;
|
||||
|
||||
new_node->lowest = node->lowest;
|
||||
new_node->checked = 1;
|
||||
new_node->root = btrfs_grab_root(dest);
|
||||
ASSERT(new_node->root);
|
||||
|
||||
if (!node->lowest) {
|
||||
list_for_each_entry(edge, &node->lower, list[UPPER]) {
|
||||
new_edge = btrfs_backref_alloc_edge(cache);
|
||||
if (!new_edge)
|
||||
goto fail;
|
||||
|
||||
btrfs_backref_link_edge(new_edge, edge->node[LOWER],
|
||||
new_node, LINK_UPPER);
|
||||
}
|
||||
} else {
|
||||
list_add_tail(&new_node->lower, &cache->leaves);
|
||||
}
|
||||
|
||||
rb_node = rb_simple_insert(&cache->rb_root, new_node->bytenr,
|
||||
&new_node->rb_node);
|
||||
if (rb_node)
|
||||
btrfs_backref_panic(trans->fs_info, new_node->bytenr, -EEXIST);
|
||||
|
||||
if (!new_node->lowest) {
|
||||
list_for_each_entry(new_edge, &new_node->lower, list[UPPER]) {
|
||||
list_add_tail(&new_edge->list[LOWER],
|
||||
&new_edge->node[LOWER]->upper);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
fail:
|
||||
while (!list_empty(&new_node->lower)) {
|
||||
new_edge = list_entry(new_node->lower.next,
|
||||
struct btrfs_backref_edge, list[UPPER]);
|
||||
list_del(&new_edge->list[UPPER]);
|
||||
btrfs_backref_free_edge(cache, new_edge);
|
||||
}
|
||||
btrfs_backref_free_node(cache, new_node);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/*
|
||||
* helper to add 'address of tree root -> reloc tree' mapping
|
||||
*/
|
||||
|
@ -4485,10 +4399,7 @@ int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans,
|
|||
return ret;
|
||||
}
|
||||
new_root->reloc_root = btrfs_grab_root(reloc_root);
|
||||
|
||||
if (rc->create_reloc_tree)
|
||||
ret = clone_backref_node(trans, rc, root, reloc_root);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue