Lines Matching refs:root

30 		      *root, struct btrfs_path *path, int level);
31 static int split_leaf(struct btrfs_trans_handle *trans, struct btrfs_root *root,
187 struct extent_buffer *btrfs_root_node(struct btrfs_root *root) in btrfs_root_node() argument
193 eb = rcu_dereference(root->node); in btrfs_root_node()
216 static void add_root_to_dirty_list(struct btrfs_root *root) in add_root_to_dirty_list() argument
218 struct btrfs_fs_info *fs_info = root->fs_info; in add_root_to_dirty_list()
220 if (test_bit(BTRFS_ROOT_DIRTY, &root->state) || in add_root_to_dirty_list()
221 !test_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state)) in add_root_to_dirty_list()
225 if (!test_and_set_bit(BTRFS_ROOT_DIRTY, &root->state)) { in add_root_to_dirty_list()
227 if (btrfs_root_id(root) == BTRFS_EXTENT_TREE_OBJECTID) in add_root_to_dirty_list()
228 list_move_tail(&root->dirty_list, in add_root_to_dirty_list()
231 list_move(&root->dirty_list, in add_root_to_dirty_list()
243 struct btrfs_root *root, in btrfs_copy_root() argument
247 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_copy_root()
254 WARN_ON(test_bit(BTRFS_ROOT_SHAREABLE, &root->state) && in btrfs_copy_root()
256 WARN_ON(test_bit(BTRFS_ROOT_SHAREABLE, &root->state) && in btrfs_copy_root()
257 trans->transid != btrfs_get_root_last_trans(root)); in btrfs_copy_root()
267 cow = btrfs_alloc_tree_block(trans, root, 0, new_root_objectid, in btrfs_copy_root()
295 ret = btrfs_inc_ref(trans, root, cow, 1); in btrfs_copy_root()
299 ret = btrfs_inc_ref(trans, root, cow, 0); in btrfs_copy_root()
318 const struct btrfs_root *root, in btrfs_block_can_be_shared() argument
329 if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state)) in btrfs_block_can_be_shared()
332 if (buf == root->node) in btrfs_block_can_be_shared()
335 if (buf_gen > btrfs_root_last_snapshot(&root->root_item) && in btrfs_block_can_be_shared()
339 if (buf != root->commit_root) in btrfs_block_can_be_shared()
355 struct btrfs_root *root, in update_ref_for_cow() argument
360 struct btrfs_fs_info *fs_info = root->fs_info; in update_ref_for_cow()
383 if (btrfs_block_can_be_shared(trans, root, buf)) { in update_ref_for_cow()
393 btrfs_root_id(root)); in update_ref_for_cow()
400 if (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID || in update_ref_for_cow()
413 btrfs_root_id(root), refs, flags); in update_ref_for_cow()
420 if ((owner == btrfs_root_id(root) || in update_ref_for_cow()
421 btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID) && in update_ref_for_cow()
423 ret = btrfs_inc_ref(trans, root, buf, 1); in update_ref_for_cow()
427 if (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID) { in update_ref_for_cow()
428 ret = btrfs_dec_ref(trans, root, buf, 0); in update_ref_for_cow()
431 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
441 if (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID) in update_ref_for_cow()
442 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
444 ret = btrfs_inc_ref(trans, root, cow, 0); in update_ref_for_cow()
450 if (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID) in update_ref_for_cow()
451 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
453 ret = btrfs_inc_ref(trans, root, cow, 0); in update_ref_for_cow()
456 ret = btrfs_dec_ref(trans, root, buf, 1); in update_ref_for_cow()
479 struct btrfs_root *root, in btrfs_force_cow_block() argument
486 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_force_cow_block()
500 WARN_ON(test_bit(BTRFS_ROOT_SHAREABLE, &root->state) && in btrfs_force_cow_block()
502 WARN_ON(test_bit(BTRFS_ROOT_SHAREABLE, &root->state) && in btrfs_force_cow_block()
503 trans->transid != btrfs_get_root_last_trans(root)); in btrfs_force_cow_block()
512 if (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID) { in btrfs_force_cow_block()
517 cow = btrfs_alloc_tree_block(trans, root, parent_start, in btrfs_force_cow_block()
518 btrfs_root_id(root), &disk_key, level, in btrfs_force_cow_block()
531 if (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID) in btrfs_force_cow_block()
534 btrfs_set_header_owner(cow, btrfs_root_id(root)); in btrfs_force_cow_block()
538 ret = update_ref_for_cow(trans, root, buf, cow, &last_ref); in btrfs_force_cow_block()
544 if (test_bit(BTRFS_ROOT_SHAREABLE, &root->state)) { in btrfs_force_cow_block()
545 ret = btrfs_reloc_cow_block(trans, root, buf, cow); in btrfs_force_cow_block()
552 if (buf == root->node) { in btrfs_force_cow_block()
554 if (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID || in btrfs_force_cow_block()
558 ret = btrfs_tree_mod_log_insert_root(root->node, cow, true); in btrfs_force_cow_block()
564 rcu_assign_pointer(root->node, cow); in btrfs_force_cow_block()
566 ret = btrfs_free_tree_block(trans, btrfs_root_id(root), buf, in btrfs_force_cow_block()
569 add_root_to_dirty_list(root); in btrfs_force_cow_block()
594 ret = btrfs_free_tree_block(trans, btrfs_root_id(root), buf, in btrfs_force_cow_block()
602 trace_btrfs_cow_block(root, buf, cow); in btrfs_force_cow_block()
617 const struct btrfs_root *root, in should_cow_block() argument
620 if (btrfs_is_testing(root->fs_info)) in should_cow_block()
639 !(btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID && in should_cow_block()
641 !test_bit(BTRFS_ROOT_FORCE_COW, &root->state)) in should_cow_block()
652 struct btrfs_root *root, struct extent_buffer *buf, in btrfs_cow_block() argument
657 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_cow_block()
660 if (unlikely(test_bit(BTRFS_ROOT_DELETING, &root->state))) { in btrfs_cow_block()
664 buf->start, btrfs_root_id(root)); in btrfs_cow_block()
679 buf->start, btrfs_root_id(root), trans->transid, in btrfs_cow_block()
685 if (!should_cow_block(trans, root, buf)) { in btrfs_cow_block()
698 btrfs_qgroup_trace_subtree_after_cow(trans, root, buf); in btrfs_cow_block()
699 return btrfs_force_cow_block(trans, root, buf, parent, parent_slot, in btrfs_cow_block()
806 static void root_add_used_bytes(struct btrfs_root *root) in root_add_used_bytes() argument
808 spin_lock(&root->accounting_lock); in root_add_used_bytes()
809 btrfs_set_root_used(&root->root_item, in root_add_used_bytes()
810 btrfs_root_used(&root->root_item) + root->fs_info->nodesize); in root_add_used_bytes()
811 spin_unlock(&root->accounting_lock); in root_add_used_bytes()
814 static void root_sub_used_bytes(struct btrfs_root *root) in root_sub_used_bytes() argument
816 spin_lock(&root->accounting_lock); in root_sub_used_bytes()
817 btrfs_set_root_used(&root->root_item, in root_sub_used_bytes()
818 btrfs_root_used(&root->root_item) - root->fs_info->nodesize); in root_sub_used_bytes()
819 spin_unlock(&root->accounting_lock); in root_sub_used_bytes()
861 struct btrfs_root *root, in balance_level() argument
864 struct btrfs_fs_info *fs_info = root->fs_info; in balance_level()
907 ret = btrfs_cow_block(trans, root, child, mid, 0, &child, in balance_level()
915 ret = btrfs_tree_mod_log_insert_root(root->node, child, true); in balance_level()
922 rcu_assign_pointer(root->node, child); in balance_level()
924 add_root_to_dirty_list(root); in balance_level()
934 root_sub_used_bytes(root); in balance_level()
935 ret = btrfs_free_tree_block(trans, btrfs_root_id(root), mid, 0, 1); in balance_level()
957 wret = btrfs_cow_block(trans, root, left, in balance_level()
975 wret = btrfs_cow_block(trans, root, right, in balance_level()
1002 ret = btrfs_del_ptr(trans, root, path, level + 1, pslot + 1); in balance_level()
1008 root_sub_used_bytes(root); in balance_level()
1009 ret = btrfs_free_tree_block(trans, btrfs_root_id(root), in balance_level()
1044 mid->start, btrfs_root_id(root)); in balance_level()
1064 ret = btrfs_del_ptr(trans, root, path, level + 1, pslot); in balance_level()
1070 root_sub_used_bytes(root); in balance_level()
1071 ret = btrfs_free_tree_block(trans, btrfs_root_id(root), mid, 0, 1); in balance_level()
1131 struct btrfs_root *root, in push_nodes_for_insert() argument
1134 struct btrfs_fs_info *fs_info = root->fs_info; in push_nodes_for_insert()
1172 ret = btrfs_cow_block(trans, root, left, parent, in push_nodes_for_insert()
1232 ret = btrfs_cow_block(trans, root, right, in push_nodes_for_insert()
1451 read_block_for_search(struct btrfs_root *root, struct btrfs_path *p, in read_block_for_search() argument
1455 struct btrfs_fs_info *fs_info = root->fs_info; in read_block_for_search()
1472 check.owner_root = btrfs_root_id(root); in read_block_for_search()
1510 btrfs_maybe_reset_lockdep_class(root, tmp); in read_block_for_search()
1554 btrfs_maybe_reset_lockdep_class(root, tmp); in read_block_for_search()
1610 struct btrfs_root *root, struct btrfs_path *p, in setup_nodes_for_search() argument
1614 struct btrfs_fs_info *fs_info = root->fs_info; in setup_nodes_for_search()
1627 ret = split_node(trans, root, p, level); in setup_nodes_for_search()
1640 ret = balance_level(trans, root, p, level); in setup_nodes_for_search()
1689 static struct extent_buffer *btrfs_search_slot_get_root(struct btrfs_root *root, in btrfs_search_slot_get_root() argument
1698 b = root->commit_root; in btrfs_search_slot_get_root()
1711 b = btrfs_root_node(root); in btrfs_search_slot_get_root()
1729 b = btrfs_try_read_lock_root_node(root); in btrfs_search_slot_get_root()
1733 b = btrfs_read_lock_root_node(root); in btrfs_search_slot_get_root()
1744 b = btrfs_lock_root_node(root); in btrfs_search_slot_get_root()
1830 struct btrfs_root *root, in search_leaf() argument
1944 ret2 = split_leaf(trans, root, key, path, ins_len, (ret == 0)); in search_leaf()
1987 int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_search_slot() argument
2003 if (!root) in btrfs_search_slot()
2006 fs_info = root->fs_info; in btrfs_search_slot()
2057 b = btrfs_search_slot_get_root(root, p, write_lock_level); in btrfs_search_slot()
2077 if (!should_cow_block(trans, root, b)) in btrfs_search_slot()
2094 ret2 = btrfs_cow_block(trans, root, b, NULL, 0, in btrfs_search_slot()
2097 ret2 = btrfs_cow_block(trans, root, b, in btrfs_search_slot()
2133 ret = search_leaf(trans, root, key, p, ins_len, prev_cmp); in btrfs_search_slot()
2150 ret2 = setup_nodes_for_search(trans, root, p, b, level, ins_len, in btrfs_search_slot()
2181 ret2 = read_block_for_search(root, p, &b, slot, key); in btrfs_search_slot()
2192 btrfs_maybe_reset_lockdep_class(root, b); in btrfs_search_slot()
2241 int btrfs_search_old_slot(struct btrfs_root *root, const struct btrfs_key *key, in btrfs_search_old_slot() argument
2244 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_search_old_slot()
2258 return btrfs_search_slot(NULL, root, key, p, 0, 0); in btrfs_search_old_slot()
2262 b = btrfs_get_old_root(root, time_seq); in btrfs_search_old_slot()
2308 ret2 = read_block_for_search(root, p, &b, slot, key); in btrfs_search_old_slot()
2343 static int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_prev_leaf() argument
2367 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_prev_leaf()
2427 int btrfs_search_slot_for_read(struct btrfs_root *root, in btrfs_search_slot_for_read() argument
2436 ret = btrfs_search_slot(NULL, root, key, p, 0, 0); in btrfs_search_slot_for_read()
2450 ret = btrfs_next_leaf(root, p); in btrfs_search_slot_for_read()
2466 ret = btrfs_prev_leaf(root, p); in btrfs_search_slot_for_read()
2498 int btrfs_search_backwards(struct btrfs_root *root, struct btrfs_key *key, in btrfs_search_backwards() argument
2503 ret = btrfs_search_slot(NULL, root, key, path, 0, 0); in btrfs_search_backwards()
2505 ret = btrfs_previous_item(root, path, key->objectid, key->type); in btrfs_search_backwards()
2524 int btrfs_get_next_valid_item(struct btrfs_root *root, struct btrfs_key *key, in btrfs_get_next_valid_item() argument
2530 ret = btrfs_next_leaf(root, path); in btrfs_get_next_valid_item()
2842 struct btrfs_root *root, in insert_new_root() argument
2853 BUG_ON(path->nodes[level-1] != root->node); in insert_new_root()
2861 c = btrfs_alloc_tree_block(trans, root, 0, btrfs_root_id(root), in insert_new_root()
2862 &lower_key, level, root->node->start, 0, in insert_new_root()
2867 root_add_used_bytes(root); in insert_new_root()
2879 old = root->node; in insert_new_root()
2880 ret = btrfs_tree_mod_log_insert_root(root->node, c, false); in insert_new_root()
2885 ret2 = btrfs_free_tree_block(trans, btrfs_root_id(root), c, 0, 1); in insert_new_root()
2892 rcu_assign_pointer(root->node, c); in insert_new_root()
2897 add_root_to_dirty_list(root); in insert_new_root()
2969 struct btrfs_root *root, in split_node() argument
2972 struct btrfs_fs_info *fs_info = root->fs_info; in split_node()
2982 if (c == root->node) { in split_node()
2993 ret = insert_new_root(trans, root, path, level + 1); in split_node()
2997 ret = push_nodes_for_insert(trans, root, path, level); in split_node()
3010 split = btrfs_alloc_tree_block(trans, root, 0, btrfs_root_id(root), in split_node()
3016 root_add_used_bytes(root); in split_node()
3240 *root, struct btrfs_path *path, in push_leaf_right()
3272 ret = btrfs_cow_block(trans, root, right, upper, in push_leaf_right()
3453 *root, struct btrfs_path *path, int min_data_size, in push_leaf_left()
3487 ret = btrfs_cow_block(trans, root, left, in push_leaf_left()
3582 struct btrfs_root *root, in push_for_double_split() argument
3600 ret = push_leaf_right(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
3623 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
3642 struct btrfs_root *root, in split_leaf() argument
3653 struct btrfs_fs_info *fs_info = root->fs_info; in split_leaf()
3673 wret = push_leaf_right(trans, root, path, space_needed, in split_leaf()
3681 wret = push_leaf_left(trans, root, path, space_needed, in split_leaf()
3694 ret = insert_new_root(trans, root, path, 1); in split_leaf()
3755 right = btrfs_alloc_tree_block(trans, root, 0, btrfs_root_id(root), in split_leaf()
3762 root_add_used_bytes(root); in split_leaf()
3819 push_for_double_split(trans, root, path, data_size); in split_leaf()
3827 struct btrfs_root *root, in setup_leaf_for_split() argument
3857 ret = btrfs_search_slot(trans, root, &key, path, 0, 1); in setup_leaf_for_split()
3881 ret = split_leaf(trans, root, &key, path, ins_len, 1); in setup_leaf_for_split()
3976 struct btrfs_root *root, in btrfs_split_item() argument
3982 ret = setup_leaf_for_split(trans, root, path, in btrfs_split_item()
4156 struct btrfs_root *root, struct btrfs_path *path, in setup_items_for_insert() argument
4159 struct btrfs_fs_info *fs_info = root->fs_info; in setup_items_for_insert()
4251 struct btrfs_root *root, in btrfs_setup_item_for_insert() argument
4263 setup_items_for_insert(trans, root, path, &batch); in btrfs_setup_item_for_insert()
4275 struct btrfs_root *root, in btrfs_insert_empty_items() argument
4284 ret = btrfs_search_slot(trans, root, &batch->keys[0], path, total_size, 1); in btrfs_insert_empty_items()
4293 setup_items_for_insert(trans, root, path, batch); in btrfs_insert_empty_items()
4301 int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_insert_item() argument
4313 ret = btrfs_insert_empty_item(trans, root, path, cpu_key, data_size); in btrfs_insert_item()
4332 struct btrfs_root *root, in btrfs_duplicate_item() argument
4342 ret = setup_leaf_for_split(trans, root, path, in btrfs_duplicate_item()
4348 btrfs_setup_item_for_insert(trans, root, path, new_key, item_size); in btrfs_duplicate_item()
4365 int btrfs_del_ptr(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_del_ptr() argument
4398 if (nritems == 0 && parent == root->node) { in btrfs_del_ptr()
4399 BUG_ON(btrfs_header_level(root->node) != 1); in btrfs_del_ptr()
4401 btrfs_set_header_level(root->node, 0); in btrfs_del_ptr()
4423 struct btrfs_root *root, in btrfs_del_leaf() argument
4430 ret = btrfs_del_ptr(trans, root, path, 1, path->slots[1]); in btrfs_del_leaf()
4440 root_sub_used_bytes(root); in btrfs_del_leaf()
4443 ret = btrfs_free_tree_block(trans, btrfs_root_id(root), leaf, 0, 1); in btrfs_del_leaf()
4454 int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_del_items() argument
4457 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_del_items()
4492 if (leaf == root->node) { in btrfs_del_items()
4496 ret = btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
4532 wret = push_leaf_left(trans, root, path, 0, in btrfs_del_items()
4551 wret = push_leaf_right(trans, root, path, 0, in btrfs_del_items()
4559 ret = btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
4597 int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, in btrfs_search_forward() argument
4613 cur = btrfs_read_lock_root_node(root); in btrfs_search_forward()
4665 sret = btrfs_find_next_key(root, path, min_key, level, in btrfs_search_forward()
4704 int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, in btrfs_find_next_key() argument
4740 ret = btrfs_search_slot(NULL, root, &cur_key, path, in btrfs_find_next_key()
4769 int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, in btrfs_next_old_leaf() argument
4776 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_next_old_leaf()
4803 ret = btrfs_search_old_slot(root, &key, path, time_seq); in btrfs_next_old_leaf()
4817 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_next_old_leaf()
4889 ret = read_block_for_search(root, path, &next, slot, &key); in btrfs_next_old_leaf()
4932 ret = read_block_for_search(root, path, &next, 0, &key); in btrfs_next_old_leaf()
4968 int btrfs_next_old_item(struct btrfs_root *root, struct btrfs_path *path, u64 time_seq) in btrfs_next_old_item() argument
4972 return btrfs_next_old_leaf(root, path, time_seq); in btrfs_next_old_item()
4982 int btrfs_previous_item(struct btrfs_root *root, in btrfs_previous_item() argument
4993 ret = btrfs_prev_leaf(root, path); in btrfs_previous_item()
5024 int btrfs_previous_extent_item(struct btrfs_root *root, in btrfs_previous_extent_item() argument
5034 ret = btrfs_prev_leaf(root, path); in btrfs_previous_extent_item()