Lines Matching refs:node
183 struct btrfs_backref_node *node) in mark_block_processed() argument
187 if (node->level == 0 || in mark_block_processed()
188 in_range(node->bytenr, rc->block_group->start, in mark_block_processed()
191 btrfs_set_extent_bit(&rc->processed_blocks, node->bytenr, in mark_block_processed()
192 node->bytenr + blocksize - 1, EXTENT_DIRTY, in mark_block_processed()
195 node->processed = 1; in mark_block_processed()
202 struct btrfs_backref_node *node, in walk_up_backref() argument
208 while (!list_empty(&node->upper)) { in walk_up_backref()
209 edge = list_first_entry(&node->upper, struct btrfs_backref_edge, in walk_up_backref()
212 node = edge->node[UPPER]; in walk_up_backref()
214 BUG_ON(node->detached); in walk_up_backref()
216 return node; in walk_up_backref()
231 lower = edge->node[LOWER]; in walk_down_backref()
240 return edge->node[UPPER]; in walk_down_backref()
309 struct mapping_node *node; in find_reloc_root() local
316 node = rb_entry(rb_node, struct mapping_node, rb_node); in find_reloc_root()
317 root = node->data; in find_reloc_root()
337 struct btrfs_backref_node *node) in handle_useless_nodes() argument
353 if (cur == node) in handle_useless_nodes()
365 lower = edge->node[LOWER]; in handle_useless_nodes()
414 struct btrfs_backref_node *node = NULL; in build_backref_tree() local
427 node = btrfs_backref_alloc_node(cache, bytenr, level); in build_backref_tree()
428 if (!node) { in build_backref_tree()
433 cur = node; in build_backref_tree()
450 cur = edge->node[UPPER]; in build_backref_tree()
455 ret = btrfs_backref_finish_upper_links(cache, node); in build_backref_tree()
459 if (handle_useless_nodes(rc, node)) in build_backref_tree()
460 node = NULL; in build_backref_tree()
466 btrfs_backref_error_cleanup(cache, node); in build_backref_tree()
469 ASSERT(!node || !node->detached); in build_backref_tree()
472 return node; in build_backref_tree()
482 struct mapping_node *node; in __add_reloc_root() local
485 node = kmalloc(sizeof(*node), GFP_NOFS); in __add_reloc_root()
486 if (!node) in __add_reloc_root()
489 node->bytenr = root->commit_root->start; in __add_reloc_root()
490 node->data = root; in __add_reloc_root()
493 rb_node = rb_simple_insert(&rc->reloc_root_tree.rb_root, &node->simple_node); in __add_reloc_root()
498 node->bytenr); in __add_reloc_root()
514 struct mapping_node *node = NULL; in __del_reloc_root() local
518 if (rc && root->node) { in __del_reloc_root()
523 node = rb_entry(rb_node, struct mapping_node, rb_node); in __del_reloc_root()
524 rb_erase(&node->rb_node, &rc->reloc_root_tree.rb_root); in __del_reloc_root()
525 RB_CLEAR_NODE(&node->rb_node); in __del_reloc_root()
528 ASSERT(!node || (struct btrfs_root *)node->data == root); in __del_reloc_root()
547 kfree(node); in __del_reloc_root()
558 struct mapping_node *node = NULL; in __update_reloc_root() local
565 node = rb_entry(rb_node, struct mapping_node, rb_node); in __update_reloc_root()
566 rb_erase(&node->rb_node, &rc->reloc_root_tree.rb_root); in __update_reloc_root()
570 if (!node) in __update_reloc_root()
572 BUG_ON((struct btrfs_root *)node->data != root); in __update_reloc_root()
575 node->bytenr = root->node->start; in __update_reloc_root()
576 rb_node = rb_simple_insert(&rc->reloc_root_tree.rb_root, &node->simple_node); in __update_reloc_root()
579 btrfs_backref_panic(fs_info, node->bytenr, -EEXIST); in __update_reloc_root()
648 ret = btrfs_copy_root(trans, root, root->node, &eb, in create_reloc_root()
804 if (reloc_root->commit_root != reloc_root->node) { in btrfs_update_reloc_root()
806 btrfs_set_root_node(root_item, reloc_root->node); in btrfs_update_reloc_root()
1546 refcount_inc(&reloc_root->node->refs); in merge_reloc_root()
1547 path->nodes[level] = reloc_root->node; in merge_reloc_root()
1980 struct btrfs_backref_node *node, in select_reloc_root() argument
1988 next = walk_up_backref(node, edges, &index); in select_reloc_root()
2005 node->bytenr); in select_reloc_root()
2011 node->bytenr); in select_reloc_root()
2044 node->bytenr, next->bytenr); in select_reloc_root()
2048 next->new_bytenr = root->node->start; in select_reloc_root()
2054 next = node; in select_reloc_root()
2060 next = edges[index]->node[UPPER]; in select_reloc_root()
2075 struct btrfs_root *select_one_root(struct btrfs_backref_node *node) in select_one_root() argument
2083 next = node; in select_one_root()
2103 if (next != node) in select_one_root()
2107 if (!next || next->level <= node->level) in select_one_root()
2117 struct btrfs_backref_node *node) in calcu_metadata_size() argument
2120 struct btrfs_backref_node *next = node; in calcu_metadata_size()
2126 BUG_ON(node->processed); in calcu_metadata_size()
2142 next = edge->node[UPPER]; in calcu_metadata_size()
2187 struct btrfs_backref_node *node) in reserve_metadata_space() argument
2191 num_bytes = calcu_metadata_size(rc, node) * 2; in reserve_metadata_space()
2204 struct btrfs_backref_node *node, in do_relocation() argument
2222 ASSERT(!lowest || !node->eb); in do_relocation()
2224 path->lowest_level = node->level + 1; in do_relocation()
2225 rc->backref_cache.path[node->level] = node; in do_relocation()
2226 list_for_each_entry(edge, &node->upper, list[LOWER]) { in do_relocation()
2229 upper = edge->node[UPPER]; in do_relocation()
2243 if (node->eb->start == bytenr) in do_relocation()
2280 if (bytenr != node->bytenr) { in do_relocation()
2283 bytenr, node->bytenr, slot, in do_relocation()
2289 if (node->eb->start == bytenr) in do_relocation()
2301 if (!node->eb) { in do_relocation()
2312 ASSERT(node->eb == eb); in do_relocation()
2316 .bytenr = node->eb->start, in do_relocation()
2324 node->eb->start); in do_relocation()
2329 btrfs_init_tree_ref(&ref, node->level, in do_relocation()
2347 if (!ret && node->pending) { in do_relocation()
2348 btrfs_backref_drop_node_buffer(node); in do_relocation()
2349 list_del_init(&node->list); in do_relocation()
2350 node->pending = 0; in do_relocation()
2365 struct btrfs_backref_node *node, in link_to_upper() argument
2370 btrfs_node_key_to_cpu(node->eb, &key, 0); in link_to_upper()
2371 return do_relocation(trans, rc, node, &key, path, 0); in link_to_upper()
2380 struct btrfs_backref_node *node; in finish_pending_nodes() local
2386 node = list_first_entry(&cache->pending[level], in finish_pending_nodes()
2388 list_move_tail(&node->list, &list); in finish_pending_nodes()
2389 BUG_ON(!node->pending); in finish_pending_nodes()
2392 ret = link_to_upper(trans, rc, node, path); in finish_pending_nodes()
2407 struct btrfs_backref_node *node) in update_processed_blocks() argument
2409 struct btrfs_backref_node *next = node; in update_processed_blocks()
2428 next = edge->node[UPPER]; in update_processed_blocks()
2475 struct btrfs_backref_node *node, in relocate_tree_block() argument
2482 if (!node) in relocate_tree_block()
2489 ret = reserve_metadata_space(trans, rc, node); in relocate_tree_block()
2493 BUG_ON(node->processed); in relocate_tree_block()
2494 root = select_one_root(node); in relocate_tree_block()
2502 update_processed_blocks(rc, node); in relocate_tree_block()
2521 ASSERT(node->new_bytenr == 0); in relocate_tree_block()
2522 if (node->new_bytenr) { in relocate_tree_block()
2525 node->bytenr); in relocate_tree_block()
2541 node->new_bytenr = root->node->start; in relocate_tree_block()
2542 btrfs_put_root(node->root); in relocate_tree_block()
2543 node->root = btrfs_grab_root(root); in relocate_tree_block()
2544 ASSERT(node->root); in relocate_tree_block()
2548 node->bytenr); in relocate_tree_block()
2553 update_processed_blocks(rc, node); in relocate_tree_block()
2555 ret = do_relocation(trans, rc, node, key, path, 1); in relocate_tree_block()
2558 if (ret || node->level == 0) in relocate_tree_block()
2559 btrfs_backref_cleanup_node(&rc->backref_cache, node); in relocate_tree_block()
2577 nr_levels = max(btrfs_header_level(root->node) - block->level, 0) + 1; in relocate_cowonly_block()
2610 struct btrfs_backref_node *node; in relocate_tree_blocks() local
2655 node = build_backref_tree(trans, rc, &block->key, in relocate_tree_blocks()
2657 if (IS_ERR(node)) { in relocate_tree_blocks()
2658 ret = PTR_ERR(node); in relocate_tree_blocks()
2662 ret = relocate_tree_block(trans, rc, node, &block->key, in relocate_tree_blocks()
3855 struct mapping_node *node, *tmp; in free_reloc_control() local
3858 rbtree_postorder_for_each_entry_safe(node, tmp, in free_reloc_control()
3860 kfree(node); in free_reloc_control()
4299 struct btrfs_backref_node *node; in btrfs_reloc_cow_block() local
4318 node = rc->backref_cache.path[level]; in btrfs_reloc_cow_block()
4325 if (unlikely(node->bytenr != buf->start && node->new_bytenr != buf->start)) { in btrfs_reloc_cow_block()
4328 buf->start, node->bytenr, node->new_bytenr); in btrfs_reloc_cow_block()
4332 btrfs_backref_drop_node_buffer(node); in btrfs_reloc_cow_block()
4334 node->eb = cow; in btrfs_reloc_cow_block()
4335 node->new_bytenr = cow->start; in btrfs_reloc_cow_block()
4337 if (!node->pending) { in btrfs_reloc_cow_block()
4338 list_move_tail(&node->list, in btrfs_reloc_cow_block()
4340 node->pending = 1; in btrfs_reloc_cow_block()
4344 mark_block_processed(rc, node); in btrfs_reloc_cow_block()