• Home
  • Raw
  • Download

Lines Matching refs:node

157 				 struct btrfs_backref_node *node)  in mark_block_processed()  argument
161 if (node->level == 0 || in mark_block_processed()
162 in_range(node->bytenr, rc->block_group->start, in mark_block_processed()
165 set_extent_bits(&rc->processed_blocks, node->bytenr, in mark_block_processed()
166 node->bytenr + blocksize - 1, EXTENT_DIRTY); in mark_block_processed()
168 node->processed = 1; in mark_block_processed()
182 struct btrfs_backref_node *node, in walk_up_backref() argument
188 while (!list_empty(&node->upper)) { in walk_up_backref()
189 edge = list_entry(node->upper.next, in walk_up_backref()
192 node = edge->node[UPPER]; in walk_up_backref()
194 BUG_ON(node->detached); in walk_up_backref()
196 return node; in walk_up_backref()
211 lower = edge->node[LOWER]; in walk_down_backref()
220 return edge->node[UPPER]; in walk_down_backref()
227 struct btrfs_backref_node *node, u64 bytenr) in update_backref_node() argument
230 rb_erase(&node->rb_node, &cache->rb_root); in update_backref_node()
231 node->bytenr = bytenr; in update_backref_node()
232 rb_node = rb_simple_insert(&cache->rb_root, node->bytenr, &node->rb_node); in update_backref_node()
243 struct btrfs_backref_node *node; in update_backref_cache() local
260 node = list_entry(cache->detached.next, in update_backref_cache()
262 btrfs_backref_cleanup_node(cache, node); in update_backref_cache()
266 node = list_entry(cache->changed.next, in update_backref_cache()
268 list_del_init(&node->list); in update_backref_cache()
269 BUG_ON(node->pending); in update_backref_cache()
270 update_backref_node(cache, node, node->new_bytenr); in update_backref_cache()
278 list_for_each_entry(node, &cache->pending[level], list) { in update_backref_cache()
279 BUG_ON(!node->pending); in update_backref_cache()
280 if (node->bytenr == node->new_bytenr) in update_backref_cache()
282 update_backref_node(cache, node, node->new_bytenr); in update_backref_cache()
354 struct mapping_node *node; in find_reloc_root() local
361 node = rb_entry(rb_node, struct mapping_node, rb_node); in find_reloc_root()
362 root = (struct btrfs_root *)node->data; in find_reloc_root()
382 struct btrfs_backref_node *node) in handle_useless_nodes() argument
398 if (cur == node) in handle_useless_nodes()
416 lower = edge->node[LOWER]; in handle_useless_nodes()
465 struct btrfs_backref_node *node = NULL; in build_backref_tree() local
479 node = btrfs_backref_alloc_node(cache, bytenr, level); in build_backref_tree()
480 if (!node) { in build_backref_tree()
485 node->lowest = 1; in build_backref_tree()
486 cur = node; in build_backref_tree()
504 cur = edge->node[UPPER]; in build_backref_tree()
509 ret = btrfs_backref_finish_upper_links(cache, node); in build_backref_tree()
515 if (handle_useless_nodes(rc, node)) in build_backref_tree()
516 node = NULL; in build_backref_tree()
521 btrfs_backref_error_cleanup(cache, node); in build_backref_tree()
524 ASSERT(!node || !node->detached); in build_backref_tree()
527 return node; in build_backref_tree()
542 struct btrfs_backref_node *node = NULL; in clone_backref_node() local
553 node = rb_entry(rb_node, struct btrfs_backref_node, rb_node); in clone_backref_node()
554 if (node->detached) in clone_backref_node()
555 node = NULL; in clone_backref_node()
557 BUG_ON(node->new_bytenr != reloc_root->node->start); in clone_backref_node()
560 if (!node) { in clone_backref_node()
564 node = rb_entry(rb_node, struct btrfs_backref_node, in clone_backref_node()
566 BUG_ON(node->detached); in clone_backref_node()
570 if (!node) in clone_backref_node()
573 new_node = btrfs_backref_alloc_node(cache, dest->node->start, in clone_backref_node()
574 node->level); in clone_backref_node()
578 new_node->lowest = node->lowest; in clone_backref_node()
583 if (!node->lowest) { in clone_backref_node()
584 list_for_each_entry(edge, &node->lower, list[UPPER]) { in clone_backref_node()
589 btrfs_backref_link_edge(new_edge, edge->node[LOWER], in clone_backref_node()
604 &new_edge->node[LOWER]->upper); in clone_backref_node()
626 struct mapping_node *node; in __add_reloc_root() local
629 node = kmalloc(sizeof(*node), GFP_NOFS); in __add_reloc_root()
630 if (!node) in __add_reloc_root()
633 node->bytenr = root->commit_root->start; in __add_reloc_root()
634 node->data = root; in __add_reloc_root()
638 node->bytenr, &node->rb_node); in __add_reloc_root()
643 node->bytenr); in __add_reloc_root()
658 struct mapping_node *node = NULL; in __del_reloc_root() local
662 if (rc && root->node) { in __del_reloc_root()
667 node = rb_entry(rb_node, struct mapping_node, rb_node); in __del_reloc_root()
668 rb_erase(&node->rb_node, &rc->reloc_root_tree.rb_root); in __del_reloc_root()
669 RB_CLEAR_NODE(&node->rb_node); in __del_reloc_root()
672 ASSERT(!node || (struct btrfs_root *)node->data == root); in __del_reloc_root()
691 kfree(node); in __del_reloc_root()
702 struct mapping_node *node = NULL; in __update_reloc_root() local
709 node = rb_entry(rb_node, struct mapping_node, rb_node); in __update_reloc_root()
710 rb_erase(&node->rb_node, &rc->reloc_root_tree.rb_root); in __update_reloc_root()
714 if (!node) in __update_reloc_root()
716 BUG_ON((struct btrfs_root *)node->data != root); in __update_reloc_root()
719 node->bytenr = root->node->start; in __update_reloc_root()
721 node->bytenr, &node->rb_node); in __update_reloc_root()
724 btrfs_backref_panic(fs_info, node->bytenr, -EEXIST); in __update_reloc_root()
774 ret = btrfs_copy_root(trans, root, root->node, &eb, in create_reloc_root()
924 if (reloc_root->commit_root != reloc_root->node) { in btrfs_update_reloc_root()
926 btrfs_set_root_node(root_item, reloc_root->node); in btrfs_update_reloc_root()
943 struct rb_node *node; in find_next_inode() local
950 node = root->inode_tree.rb_node; in find_next_inode()
952 while (node) { in find_next_inode()
953 prev = node; in find_next_inode()
954 entry = rb_entry(node, struct btrfs_inode, rb_node); in find_next_inode()
957 node = node->rb_left; in find_next_inode()
959 node = node->rb_right; in find_next_inode()
963 if (!node) { in find_next_inode()
967 node = prev; in find_next_inode()
973 while (node) { in find_next_inode()
974 entry = rb_entry(node, struct btrfs_inode, rb_node); in find_next_inode()
985 node = rb_next(node); in find_next_inode()
1687 atomic_inc(&reloc_root->node->refs); in merge_reloc_root()
1688 path->nodes[level] = reloc_root->node; in merge_reloc_root()
2037 struct btrfs_backref_node *node, in select_reloc_root() argument
2044 next = node; in select_reloc_root()
2060 if (next->new_bytenr != root->node->start) { in select_reloc_root()
2063 next->new_bytenr = root->node->start; in select_reloc_root()
2076 if (!next || next->level <= node->level) in select_reloc_root()
2082 next = node; in select_reloc_root()
2088 next = edges[index]->node[UPPER]; in select_reloc_root()
2103 struct btrfs_root *select_one_root(struct btrfs_backref_node *node) in select_one_root() argument
2111 next = node; in select_one_root()
2125 if (next != node) in select_one_root()
2129 if (!next || next->level <= node->level) in select_one_root()
2140 struct btrfs_backref_node *node, int reserve) in calcu_metadata_size() argument
2143 struct btrfs_backref_node *next = node; in calcu_metadata_size()
2149 BUG_ON(reserve && node->processed); in calcu_metadata_size()
2154 if (next->processed && (reserve || next != node)) in calcu_metadata_size()
2165 next = edge->node[UPPER]; in calcu_metadata_size()
2174 struct btrfs_backref_node *node) in reserve_metadata_space() argument
2182 num_bytes = calcu_metadata_size(rc, node, 1) * 2; in reserve_metadata_space()
2222 struct btrfs_backref_node *node, in do_relocation() argument
2239 BUG_ON(lowest && node->eb); in do_relocation()
2241 path->lowest_level = node->level + 1; in do_relocation()
2242 rc->backref_cache.path[node->level] = node; in do_relocation()
2243 list_for_each_entry(edge, &node->upper, list[LOWER]) { in do_relocation()
2249 upper = edge->node[UPPER]; in do_relocation()
2262 if (node->eb->start == bytenr) in do_relocation()
2303 if (bytenr != node->bytenr) { in do_relocation()
2306 bytenr, node->bytenr, slot, in do_relocation()
2312 if (node->eb->start == bytenr) in do_relocation()
2332 if (!node->eb) { in do_relocation()
2341 BUG_ON(node->eb != eb); in do_relocation()
2344 node->eb->start); in do_relocation()
2350 node->eb->start, blocksize, in do_relocation()
2353 btrfs_init_tree_ref(&ref, node->level, in do_relocation()
2370 if (!err && node->pending) { in do_relocation()
2371 btrfs_backref_drop_node_buffer(node); in do_relocation()
2372 list_move_tail(&node->list, &rc->backref_cache.changed); in do_relocation()
2373 node->pending = 0; in do_relocation()
2383 struct btrfs_backref_node *node, in link_to_upper() argument
2388 btrfs_node_key_to_cpu(node->eb, &key, 0); in link_to_upper()
2389 return do_relocation(trans, rc, node, &key, path, 0); in link_to_upper()
2398 struct btrfs_backref_node *node; in finish_pending_nodes() local
2404 node = list_entry(cache->pending[level].next, in finish_pending_nodes()
2406 list_move_tail(&node->list, &list); in finish_pending_nodes()
2407 BUG_ON(!node->pending); in finish_pending_nodes()
2410 ret = link_to_upper(trans, rc, node, path); in finish_pending_nodes()
2425 struct btrfs_backref_node *node) in update_processed_blocks() argument
2427 struct btrfs_backref_node *next = node; in update_processed_blocks()
2446 next = edge->node[UPPER]; in update_processed_blocks()
2489 struct btrfs_backref_node *node, in relocate_tree_block() argument
2496 if (!node) in relocate_tree_block()
2503 ret = reserve_metadata_space(trans, rc, node); in relocate_tree_block()
2507 BUG_ON(node->processed); in relocate_tree_block()
2508 root = select_one_root(node); in relocate_tree_block()
2510 update_processed_blocks(rc, node); in relocate_tree_block()
2516 BUG_ON(node->new_bytenr); in relocate_tree_block()
2517 BUG_ON(!list_empty(&node->list)); in relocate_tree_block()
2520 node->new_bytenr = root->node->start; in relocate_tree_block()
2521 btrfs_put_root(node->root); in relocate_tree_block()
2522 node->root = btrfs_grab_root(root); in relocate_tree_block()
2523 ASSERT(node->root); in relocate_tree_block()
2524 list_add_tail(&node->list, &rc->backref_cache.changed); in relocate_tree_block()
2526 path->lowest_level = node->level; in relocate_tree_block()
2533 update_processed_blocks(rc, node); in relocate_tree_block()
2535 ret = do_relocation(trans, rc, node, key, path, 1); in relocate_tree_block()
2538 if (ret || node->level == 0 || node->cowonly) in relocate_tree_block()
2539 btrfs_backref_cleanup_node(&rc->backref_cache, node); in relocate_tree_block()
2551 struct btrfs_backref_node *node; in relocate_tree_blocks() local
2581 node = build_backref_tree(rc, &block->key, in relocate_tree_blocks()
2583 if (IS_ERR(node)) { in relocate_tree_blocks()
2584 err = PTR_ERR(node); in relocate_tree_blocks()
2588 ret = relocate_tree_block(trans, rc, node, &block->key, in relocate_tree_blocks()
3556 struct mapping_node *node, *tmp; in free_reloc_control() local
3559 rbtree_postorder_for_each_entry_safe(node, tmp, in free_reloc_control()
3561 kfree(node); in free_reloc_control()
3961 struct btrfs_backref_node *node; in btrfs_reloc_cow_block() local
3982 node = rc->backref_cache.path[level]; in btrfs_reloc_cow_block()
3983 BUG_ON(node->bytenr != buf->start && in btrfs_reloc_cow_block()
3984 node->new_bytenr != buf->start); in btrfs_reloc_cow_block()
3986 btrfs_backref_drop_node_buffer(node); in btrfs_reloc_cow_block()
3988 node->eb = cow; in btrfs_reloc_cow_block()
3989 node->new_bytenr = cow->start; in btrfs_reloc_cow_block()
3991 if (!node->pending) { in btrfs_reloc_cow_block()
3992 list_move_tail(&node->list, in btrfs_reloc_cow_block()
3994 node->pending = 1; in btrfs_reloc_cow_block()
3998 mark_block_processed(rc, node); in btrfs_reloc_cow_block()