Lines Matching refs:root
19 *root, struct btrfs_path *path, int level);
20 static int split_leaf(struct btrfs_trans_handle *trans, struct btrfs_root *root,
29 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path,
126 struct extent_buffer *btrfs_root_node(struct btrfs_root *root) in btrfs_root_node() argument
132 eb = rcu_dereference(root->node); in btrfs_root_node()
154 struct extent_buffer *btrfs_lock_root_node(struct btrfs_root *root) in btrfs_lock_root_node() argument
159 eb = btrfs_root_node(root); in btrfs_lock_root_node()
161 if (eb == root->node) in btrfs_lock_root_node()
173 struct extent_buffer *btrfs_read_lock_root_node(struct btrfs_root *root) in btrfs_read_lock_root_node() argument
178 eb = btrfs_root_node(root); in btrfs_read_lock_root_node()
180 if (eb == root->node) in btrfs_read_lock_root_node()
192 static void add_root_to_dirty_list(struct btrfs_root *root) in add_root_to_dirty_list() argument
194 struct btrfs_fs_info *fs_info = root->fs_info; in add_root_to_dirty_list()
196 if (test_bit(BTRFS_ROOT_DIRTY, &root->state) || in add_root_to_dirty_list()
197 !test_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state)) in add_root_to_dirty_list()
201 if (!test_and_set_bit(BTRFS_ROOT_DIRTY, &root->state)) { in add_root_to_dirty_list()
203 if (root->root_key.objectid == BTRFS_EXTENT_TREE_OBJECTID) in add_root_to_dirty_list()
204 list_move_tail(&root->dirty_list, in add_root_to_dirty_list()
207 list_move(&root->dirty_list, in add_root_to_dirty_list()
219 struct btrfs_root *root, in btrfs_copy_root() argument
223 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_copy_root()
229 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in btrfs_copy_root()
231 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in btrfs_copy_root()
232 trans->transid != root->last_trans); in btrfs_copy_root()
240 cow = btrfs_alloc_tree_block(trans, root, 0, new_root_objectid, in btrfs_copy_root()
260 ret = btrfs_inc_ref(trans, root, cow, 1); in btrfs_copy_root()
262 ret = btrfs_inc_ref(trans, root, cow, 0); in btrfs_copy_root()
869 int btrfs_block_can_be_shared(struct btrfs_root *root, in btrfs_block_can_be_shared() argument
878 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in btrfs_block_can_be_shared()
879 buf != root->node && buf != root->commit_root && in btrfs_block_can_be_shared()
881 btrfs_root_last_snapshot(&root->root_item) || in btrfs_block_can_be_shared()
889 struct btrfs_root *root, in update_ref_for_cow() argument
894 struct btrfs_fs_info *fs_info = root->fs_info; in update_ref_for_cow()
918 if (btrfs_block_can_be_shared(root, buf)) { in update_ref_for_cow()
931 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID || in update_ref_for_cow()
943 if ((owner == root->root_key.objectid || in update_ref_for_cow()
944 root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) && in update_ref_for_cow()
946 ret = btrfs_inc_ref(trans, root, buf, 1); in update_ref_for_cow()
950 if (root->root_key.objectid == in update_ref_for_cow()
952 ret = btrfs_dec_ref(trans, root, buf, 0); in update_ref_for_cow()
955 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
962 if (root->root_key.objectid == in update_ref_for_cow()
964 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
966 ret = btrfs_inc_ref(trans, root, cow, 0); in update_ref_for_cow()
982 if (root->root_key.objectid == in update_ref_for_cow()
984 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
986 ret = btrfs_inc_ref(trans, root, cow, 0); in update_ref_for_cow()
989 ret = btrfs_dec_ref(trans, root, buf, 1); in update_ref_for_cow()
1001 struct btrfs_root *root, in alloc_tree_block_no_bg_flush() argument
1008 struct btrfs_fs_info *fs_info = root->fs_info; in alloc_tree_block_no_bg_flush()
1027 if (root == fs_info->extent_root || in alloc_tree_block_no_bg_flush()
1028 root == fs_info->chunk_root || in alloc_tree_block_no_bg_flush()
1029 root == fs_info->dev_root || in alloc_tree_block_no_bg_flush()
1030 root == fs_info->free_space_root) in alloc_tree_block_no_bg_flush()
1033 ret = btrfs_alloc_tree_block(trans, root, parent_start, in alloc_tree_block_no_bg_flush()
1034 root->root_key.objectid, disk_key, level, in alloc_tree_block_no_bg_flush()
1054 struct btrfs_root *root, in __btrfs_cow_block() argument
1060 struct btrfs_fs_info *fs_info = root->fs_info; in __btrfs_cow_block()
1073 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in __btrfs_cow_block()
1075 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in __btrfs_cow_block()
1076 trans->transid != root->last_trans); in __btrfs_cow_block()
1085 if ((root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) && parent) in __btrfs_cow_block()
1088 cow = alloc_tree_block_no_bg_flush(trans, root, parent_start, &disk_key, in __btrfs_cow_block()
1101 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) in __btrfs_cow_block()
1104 btrfs_set_header_owner(cow, root->root_key.objectid); in __btrfs_cow_block()
1108 ret = update_ref_for_cow(trans, root, buf, cow, &last_ref); in __btrfs_cow_block()
1114 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state)) { in __btrfs_cow_block()
1115 ret = btrfs_reloc_cow_block(trans, root, buf, cow); in __btrfs_cow_block()
1122 if (buf == root->node) { in __btrfs_cow_block()
1124 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID || in __btrfs_cow_block()
1129 ret = tree_mod_log_insert_root(root->node, cow, 1); in __btrfs_cow_block()
1131 rcu_assign_pointer(root->node, cow); in __btrfs_cow_block()
1133 btrfs_free_tree_block(trans, root, buf, parent_start, in __btrfs_cow_block()
1136 add_root_to_dirty_list(root); in __btrfs_cow_block()
1153 btrfs_free_tree_block(trans, root, buf, parent_start, in __btrfs_cow_block()
1362 get_old_root(struct btrfs_root *root, u64 time_seq) in get_old_root() argument
1364 struct btrfs_fs_info *fs_info = root->fs_info; in get_old_root()
1375 eb_root = btrfs_read_lock_root_node(root); in get_old_root()
1436 int btrfs_old_root_level(struct btrfs_root *root, u64 time_seq) in btrfs_old_root_level() argument
1440 struct extent_buffer *eb_root = btrfs_root_node(root); in btrfs_old_root_level()
1454 struct btrfs_root *root, in should_cow_block() argument
1457 if (btrfs_is_testing(root->fs_info)) in should_cow_block()
1476 !(root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID && in should_cow_block()
1478 !test_bit(BTRFS_ROOT_FORCE_COW, &root->state)) in should_cow_block()
1489 struct btrfs_root *root, struct extent_buffer *buf, in btrfs_cow_block() argument
1493 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_cow_block()
1497 if (test_bit(BTRFS_ROOT_DELETING, &root->state)) in btrfs_cow_block()
1510 if (!should_cow_block(trans, root, buf)) { in btrfs_cow_block()
1528 btrfs_qgroup_trace_subtree_after_cow(trans, root, buf); in btrfs_cow_block()
1529 ret = __btrfs_cow_block(trans, root, buf, parent, in btrfs_cow_block()
1532 trace_btrfs_cow_block(root, buf, *cow_ret); in btrfs_cow_block()
1589 struct btrfs_root *root, struct extent_buffer *parent, in btrfs_realloc_node() argument
1593 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_realloc_node()
1682 err = __btrfs_cow_block(trans, root, cur, parent, i, in btrfs_realloc_node()
1798 static void root_add_used(struct btrfs_root *root, u32 size) in root_add_used() argument
1800 spin_lock(&root->accounting_lock); in root_add_used()
1801 btrfs_set_root_used(&root->root_item, in root_add_used()
1802 btrfs_root_used(&root->root_item) + size); in root_add_used()
1803 spin_unlock(&root->accounting_lock); in root_add_used()
1806 static void root_sub_used(struct btrfs_root *root, u32 size) in root_sub_used() argument
1808 spin_lock(&root->accounting_lock); in root_sub_used()
1809 btrfs_set_root_used(&root->root_item, in root_sub_used()
1810 btrfs_root_used(&root->root_item) - size); in root_sub_used()
1811 spin_unlock(&root->accounting_lock); in root_sub_used()
1847 struct btrfs_root *root, in balance_level() argument
1850 struct btrfs_fs_info *fs_info = root->fs_info; in balance_level()
1896 ret = btrfs_cow_block(trans, root, child, mid, 0, &child); in balance_level()
1903 ret = tree_mod_log_insert_root(root->node, child, 1); in balance_level()
1905 rcu_assign_pointer(root->node, child); in balance_level()
1907 add_root_to_dirty_list(root); in balance_level()
1917 root_sub_used(root, mid->len); in balance_level()
1918 btrfs_free_tree_block(trans, root, mid, 0, 1); in balance_level()
1934 wret = btrfs_cow_block(trans, root, left, in balance_level()
1949 wret = btrfs_cow_block(trans, root, right, in balance_level()
1975 del_ptr(root, path, level + 1, pslot + 1); in balance_level()
1976 root_sub_used(root, right->len); in balance_level()
1977 btrfs_free_tree_block(trans, root, right, 0, 1); in balance_level()
2020 del_ptr(root, path, level + 1, pslot); in balance_level()
2021 root_sub_used(root, mid->len); in balance_level()
2022 btrfs_free_tree_block(trans, root, mid, 0, 1); in balance_level()
2075 struct btrfs_root *root, in push_nodes_for_insert() argument
2078 struct btrfs_fs_info *fs_info = root->fs_info; in push_nodes_for_insert()
2117 ret = btrfs_cow_block(trans, root, left, parent, in push_nodes_for_insert()
2171 ret = btrfs_cow_block(trans, root, right, in push_nodes_for_insert()
2416 read_block_for_search(struct btrfs_root *root, struct btrfs_path *p, in read_block_for_search() argument
2420 struct btrfs_fs_info *fs_info = root->fs_info; in read_block_for_search()
2516 struct btrfs_root *root, struct btrfs_path *p, in setup_nodes_for_search() argument
2520 struct btrfs_fs_info *fs_info = root->fs_info; in setup_nodes_for_search()
2535 sret = split_node(trans, root, p, level); in setup_nodes_for_search()
2555 sret = balance_level(trans, root, p, level); in setup_nodes_for_search()
2624 static struct extent_buffer *btrfs_search_slot_get_root(struct btrfs_root *root, in btrfs_search_slot_get_root() argument
2628 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_search_slot_get_root()
2648 b = btrfs_clone_extent_buffer(root->commit_root); in btrfs_search_slot_get_root()
2654 b = root->commit_root; in btrfs_search_slot_get_root()
2668 b = btrfs_root_node(root); in btrfs_search_slot_get_root()
2682 b = btrfs_read_lock_root_node(root); in btrfs_search_slot_get_root()
2692 b = btrfs_lock_root_node(root); in btrfs_search_slot_get_root()
2734 int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_search_slot() argument
2781 b = btrfs_search_slot_get_root(root, p, write_lock_level); in btrfs_search_slot()
2802 if (!should_cow_block(trans, root, b)) { in btrfs_search_slot()
2822 err = btrfs_cow_block(trans, root, b, NULL, 0, in btrfs_search_slot()
2825 err = btrfs_cow_block(trans, root, b, in btrfs_search_slot()
2871 err = setup_nodes_for_search(trans, root, p, b, level, in btrfs_search_slot()
2904 err = read_block_for_search(root, p, &b, level, in btrfs_search_slot()
2941 err = split_leaf(trans, root, key, in btrfs_search_slot()
2980 int btrfs_search_old_slot(struct btrfs_root *root, const struct btrfs_key *key, in btrfs_search_old_slot() argument
2983 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_search_old_slot()
2998 return btrfs_search_slot(NULL, root, key, p, 0, 0); in btrfs_search_old_slot()
3002 b = get_old_root(root, time_seq); in btrfs_search_old_slot()
3046 err = read_block_for_search(root, p, &b, level, in btrfs_search_old_slot()
3095 int btrfs_search_slot_for_read(struct btrfs_root *root, in btrfs_search_slot_for_read() argument
3104 ret = btrfs_search_slot(NULL, root, key, p, 0, 0); in btrfs_search_slot_for_read()
3118 ret = btrfs_next_leaf(root, p); in btrfs_search_slot_for_read()
3134 ret = btrfs_prev_leaf(root, p); in btrfs_search_slot_for_read()
3390 struct btrfs_root *root, in insert_new_root() argument
3393 struct btrfs_fs_info *fs_info = root->fs_info; in insert_new_root()
3402 BUG_ON(path->nodes[level-1] != root->node); in insert_new_root()
3410 c = alloc_tree_block_no_bg_flush(trans, root, 0, &lower_key, level, in insert_new_root()
3411 root->node->start, 0); in insert_new_root()
3415 root_add_used(root, fs_info->nodesize); in insert_new_root()
3427 old = root->node; in insert_new_root()
3428 ret = tree_mod_log_insert_root(root->node, c, 0); in insert_new_root()
3430 rcu_assign_pointer(root->node, c); in insert_new_root()
3435 add_root_to_dirty_list(root); in insert_new_root()
3499 struct btrfs_root *root, in split_node() argument
3502 struct btrfs_fs_info *fs_info = root->fs_info; in split_node()
3512 if (c == root->node) { in split_node()
3523 ret = insert_new_root(trans, root, path, level + 1); in split_node()
3527 ret = push_nodes_for_insert(trans, root, path, level); in split_node()
3540 split = alloc_tree_block_no_bg_flush(trans, root, 0, &disk_key, level, in split_node()
3545 root_add_used(root, fs_info->nodesize); in split_node()
3782 *root, struct btrfs_path *path, in push_leaf_right()
3820 ret = btrfs_cow_block(trans, root, right, upper, in push_leaf_right()
4017 *root, struct btrfs_path *path, int min_data_size, in push_leaf_left()
4057 ret = btrfs_cow_block(trans, root, left, in push_leaf_left()
4156 struct btrfs_root *root, in push_for_double_split() argument
4174 ret = push_leaf_right(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4197 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4216 struct btrfs_root *root, in split_leaf() argument
4227 struct btrfs_fs_info *fs_info = root->fs_info; in split_leaf()
4247 wret = push_leaf_right(trans, root, path, space_needed, in split_leaf()
4255 wret = push_leaf_left(trans, root, path, space_needed, in split_leaf()
4268 ret = insert_new_root(trans, root, path, 1); in split_leaf()
4321 right = alloc_tree_block_no_bg_flush(trans, root, 0, &disk_key, 0, in split_leaf()
4326 root_add_used(root, fs_info->nodesize); in split_leaf()
4368 push_for_double_split(trans, root, path, data_size); in split_leaf()
4376 struct btrfs_root *root, in setup_leaf_for_split() argument
4405 ret = btrfs_search_slot(trans, root, &key, path, 0, 1); in setup_leaf_for_split()
4430 ret = split_leaf(trans, root, &key, path, ins_len, 1); in setup_leaf_for_split()
4527 struct btrfs_root *root, in btrfs_split_item() argument
4533 ret = setup_leaf_for_split(trans, root, path, in btrfs_split_item()
4551 struct btrfs_root *root, in btrfs_duplicate_item() argument
4561 ret = setup_leaf_for_split(trans, root, path, in btrfs_duplicate_item()
4567 setup_items_for_insert(root, path, new_key, &item_size, in btrfs_duplicate_item()
4749 void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path, in setup_items_for_insert() argument
4753 struct btrfs_fs_info *fs_info = root->fs_info; in setup_items_for_insert()
4841 struct btrfs_root *root, in btrfs_insert_empty_items() argument
4856 ret = btrfs_search_slot(trans, root, cpu_key, path, total_size, 1); in btrfs_insert_empty_items()
4865 setup_items_for_insert(root, path, cpu_key, data_size, in btrfs_insert_empty_items()
4874 int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_insert_item() argument
4886 ret = btrfs_insert_empty_item(trans, root, path, cpu_key, data_size); in btrfs_insert_item()
4903 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path, in del_ptr() argument
4930 if (nritems == 0 && parent == root->node) { in del_ptr()
4931 BUG_ON(btrfs_header_level(root->node) != 1); in del_ptr()
4933 btrfs_set_header_level(root->node, 0); in del_ptr()
4954 struct btrfs_root *root, in btrfs_del_leaf() argument
4959 del_ptr(root, path, 1, path->slots[1]); in btrfs_del_leaf()
4967 root_sub_used(root, leaf->len); in btrfs_del_leaf()
4970 btrfs_free_tree_block(trans, root, leaf, 0, 1); in btrfs_del_leaf()
4977 int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_del_items() argument
4980 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_del_items()
5027 if (leaf == root->node) { in btrfs_del_items()
5032 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
5053 wret = push_leaf_left(trans, root, path, 1, 1, in btrfs_del_items()
5060 wret = push_leaf_right(trans, root, path, 1, in btrfs_del_items()
5068 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
5096 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_prev_leaf() argument
5118 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_prev_leaf()
5157 int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, in btrfs_search_forward() argument
5172 cur = btrfs_read_lock_root_node(root); in btrfs_search_forward()
5224 sret = btrfs_find_next_key(root, path, min_key, level, in btrfs_search_forward()
5274 int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, in btrfs_find_next_key() argument
5310 ret = btrfs_search_slot(NULL, root, &cur_key, path, in btrfs_find_next_key()
5344 int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_next_leaf() argument
5346 return btrfs_next_old_leaf(root, path, 0); in btrfs_next_leaf()
5349 int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, in btrfs_next_old_leaf() argument
5377 ret = btrfs_search_old_slot(root, &key, path, time_seq); in btrfs_next_old_leaf()
5379 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_next_old_leaf()
5441 ret = read_block_for_search(root, path, &next, level, in btrfs_next_old_leaf()
5489 ret = read_block_for_search(root, path, &next, level, in btrfs_next_old_leaf()
5524 int btrfs_previous_item(struct btrfs_root *root, in btrfs_previous_item() argument
5536 ret = btrfs_prev_leaf(root, path); in btrfs_previous_item()
5567 int btrfs_previous_extent_item(struct btrfs_root *root, in btrfs_previous_extent_item() argument
5578 ret = btrfs_prev_leaf(root, path); in btrfs_previous_extent_item()