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,
42 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path,
148 struct extent_buffer *btrfs_root_node(struct btrfs_root *root) in btrfs_root_node() argument
154 eb = rcu_dereference(root->node); in btrfs_root_node()
176 struct extent_buffer *btrfs_lock_root_node(struct btrfs_root *root) in btrfs_lock_root_node() argument
181 eb = btrfs_root_node(root); in btrfs_lock_root_node()
183 if (eb == root->node) in btrfs_lock_root_node()
195 static struct extent_buffer *btrfs_read_lock_root_node(struct btrfs_root *root) in btrfs_read_lock_root_node() argument
200 eb = btrfs_root_node(root); in btrfs_read_lock_root_node()
202 if (eb == root->node) in btrfs_read_lock_root_node()
214 static void add_root_to_dirty_list(struct btrfs_root *root) in add_root_to_dirty_list() argument
216 struct btrfs_fs_info *fs_info = root->fs_info; in add_root_to_dirty_list()
218 if (test_bit(BTRFS_ROOT_DIRTY, &root->state) || in add_root_to_dirty_list()
219 !test_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state)) in add_root_to_dirty_list()
223 if (!test_and_set_bit(BTRFS_ROOT_DIRTY, &root->state)) { in add_root_to_dirty_list()
225 if (root->objectid == BTRFS_EXTENT_TREE_OBJECTID) in add_root_to_dirty_list()
226 list_move_tail(&root->dirty_list, in add_root_to_dirty_list()
229 list_move(&root->dirty_list, in add_root_to_dirty_list()
241 struct btrfs_root *root, in btrfs_copy_root() argument
245 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_copy_root()
251 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in btrfs_copy_root()
253 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in btrfs_copy_root()
254 trans->transid != root->last_trans); in btrfs_copy_root()
262 cow = btrfs_alloc_tree_block(trans, root, 0, new_root_objectid, in btrfs_copy_root()
282 ret = btrfs_inc_ref(trans, root, cow, 1); in btrfs_copy_root()
284 ret = btrfs_inc_ref(trans, root, cow, 0); in btrfs_copy_root()
916 tree_mod_log_set_root_pointer(struct btrfs_root *root, in tree_mod_log_set_root_pointer() argument
921 ret = tree_mod_log_insert_root(root->fs_info, root->node, in tree_mod_log_set_root_pointer()
929 int btrfs_block_can_be_shared(struct btrfs_root *root, in btrfs_block_can_be_shared() argument
938 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in btrfs_block_can_be_shared()
939 buf != root->node && buf != root->commit_root && in btrfs_block_can_be_shared()
941 btrfs_root_last_snapshot(&root->root_item) || in btrfs_block_can_be_shared()
945 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in btrfs_block_can_be_shared()
953 struct btrfs_root *root, in update_ref_for_cow() argument
958 struct btrfs_fs_info *fs_info = root->fs_info; in update_ref_for_cow()
982 if (btrfs_block_can_be_shared(root, buf)) { in update_ref_for_cow()
995 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID || in update_ref_for_cow()
1007 if ((owner == root->root_key.objectid || in update_ref_for_cow()
1008 root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) && in update_ref_for_cow()
1010 ret = btrfs_inc_ref(trans, root, buf, 1); in update_ref_for_cow()
1014 if (root->root_key.objectid == in update_ref_for_cow()
1016 ret = btrfs_dec_ref(trans, root, buf, 0); in update_ref_for_cow()
1019 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
1026 if (root->root_key.objectid == in update_ref_for_cow()
1028 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
1030 ret = btrfs_inc_ref(trans, root, cow, 0); in update_ref_for_cow()
1046 if (root->root_key.objectid == in update_ref_for_cow()
1048 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
1050 ret = btrfs_inc_ref(trans, root, cow, 0); in update_ref_for_cow()
1053 ret = btrfs_dec_ref(trans, root, buf, 1); in update_ref_for_cow()
1076 struct btrfs_root *root, in __btrfs_cow_block() argument
1082 struct btrfs_fs_info *fs_info = root->fs_info; in __btrfs_cow_block()
1095 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in __btrfs_cow_block()
1097 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in __btrfs_cow_block()
1098 trans->transid != root->last_trans); in __btrfs_cow_block()
1107 if ((root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) && parent) in __btrfs_cow_block()
1110 cow = btrfs_alloc_tree_block(trans, root, parent_start, in __btrfs_cow_block()
1111 root->root_key.objectid, &disk_key, level, in __btrfs_cow_block()
1124 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) in __btrfs_cow_block()
1127 btrfs_set_header_owner(cow, root->root_key.objectid); in __btrfs_cow_block()
1131 ret = update_ref_for_cow(trans, root, buf, cow, &last_ref); in __btrfs_cow_block()
1137 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state)) { in __btrfs_cow_block()
1138 ret = btrfs_reloc_cow_block(trans, root, buf, cow); in __btrfs_cow_block()
1145 if (buf == root->node) { in __btrfs_cow_block()
1147 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID || in __btrfs_cow_block()
1152 tree_mod_log_set_root_pointer(root, cow, 1); in __btrfs_cow_block()
1153 rcu_assign_pointer(root->node, cow); in __btrfs_cow_block()
1155 btrfs_free_tree_block(trans, root, buf, parent_start, in __btrfs_cow_block()
1158 add_root_to_dirty_list(root); in __btrfs_cow_block()
1175 btrfs_free_tree_block(trans, root, buf, parent_start, in __btrfs_cow_block()
1387 get_old_root(struct btrfs_root *root, u64 time_seq) in get_old_root() argument
1389 struct btrfs_fs_info *fs_info = root->fs_info; in get_old_root()
1399 eb_root = btrfs_read_lock_root_node(root); in get_old_root()
1459 int btrfs_old_root_level(struct btrfs_root *root, u64 time_seq) in btrfs_old_root_level() argument
1463 struct extent_buffer *eb_root = btrfs_root_node(root); in btrfs_old_root_level()
1465 tm = __tree_mod_log_oldest_root(root->fs_info, eb_root, time_seq); in btrfs_old_root_level()
1477 struct btrfs_root *root, in should_cow_block() argument
1480 if (btrfs_is_testing(root->fs_info)) in should_cow_block()
1499 !(root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID && in should_cow_block()
1501 !test_bit(BTRFS_ROOT_FORCE_COW, &root->state)) in should_cow_block()
1512 struct btrfs_root *root, struct extent_buffer *buf, in btrfs_cow_block() argument
1516 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_cow_block()
1529 if (!should_cow_block(trans, root, buf)) { in btrfs_cow_block()
1541 ret = __btrfs_cow_block(trans, root, buf, parent, in btrfs_cow_block()
1544 trace_btrfs_cow_block(root, buf, *cow_ret); in btrfs_cow_block()
1601 struct btrfs_root *root, struct extent_buffer *parent, in btrfs_realloc_node() argument
1605 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_realloc_node()
1689 err = __btrfs_cow_block(trans, root, cur, parent, i, in btrfs_realloc_node()
1811 static void root_add_used(struct btrfs_root *root, u32 size) in root_add_used() argument
1813 spin_lock(&root->accounting_lock); in root_add_used()
1814 btrfs_set_root_used(&root->root_item, in root_add_used()
1815 btrfs_root_used(&root->root_item) + size); in root_add_used()
1816 spin_unlock(&root->accounting_lock); in root_add_used()
1819 static void root_sub_used(struct btrfs_root *root, u32 size) in root_sub_used() argument
1821 spin_lock(&root->accounting_lock); in root_sub_used()
1822 btrfs_set_root_used(&root->root_item, in root_sub_used()
1823 btrfs_root_used(&root->root_item) - size); in root_sub_used()
1824 spin_unlock(&root->accounting_lock); in root_sub_used()
1858 struct btrfs_root *root, in balance_level() argument
1861 struct btrfs_fs_info *fs_info = root->fs_info; in balance_level()
1908 ret = btrfs_cow_block(trans, root, child, mid, 0, &child); in balance_level()
1915 tree_mod_log_set_root_pointer(root, child, 1); in balance_level()
1916 rcu_assign_pointer(root->node, child); in balance_level()
1918 add_root_to_dirty_list(root); in balance_level()
1928 root_sub_used(root, mid->len); in balance_level()
1929 btrfs_free_tree_block(trans, root, mid, 0, 1); in balance_level()
1945 wret = btrfs_cow_block(trans, root, left, in balance_level()
1960 wret = btrfs_cow_block(trans, root, right, in balance_level()
1986 del_ptr(root, path, level + 1, pslot + 1); in balance_level()
1987 root_sub_used(root, right->len); in balance_level()
1988 btrfs_free_tree_block(trans, root, right, 0, 1); in balance_level()
2030 del_ptr(root, path, level + 1, pslot); in balance_level()
2031 root_sub_used(root, mid->len); in balance_level()
2032 btrfs_free_tree_block(trans, root, mid, 0, 1); in balance_level()
2083 struct btrfs_root *root, in push_nodes_for_insert() argument
2086 struct btrfs_fs_info *fs_info = root->fs_info; in push_nodes_for_insert()
2125 ret = btrfs_cow_block(trans, root, left, parent, in push_nodes_for_insert()
2178 ret = btrfs_cow_block(trans, root, right, in push_nodes_for_insert()
2423 read_block_for_search(struct btrfs_root *root, struct btrfs_path *p, in read_block_for_search() argument
2427 struct btrfs_fs_info *fs_info = root->fs_info; in read_block_for_search()
2509 struct btrfs_root *root, struct btrfs_path *p, in setup_nodes_for_search() argument
2513 struct btrfs_fs_info *fs_info = root->fs_info; in setup_nodes_for_search()
2528 sret = split_node(trans, root, p, level); in setup_nodes_for_search()
2549 sret = balance_level(trans, root, p, level); in setup_nodes_for_search()
2653 int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_search_slot() argument
2657 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_search_slot()
2714 b = root->commit_root; in btrfs_search_slot()
2723 b = btrfs_root_node(root); in btrfs_search_slot()
2729 b = btrfs_read_lock_root_node(root); in btrfs_search_slot()
2735 b = btrfs_lock_root_node(root); in btrfs_search_slot()
2762 if (!should_cow_block(trans, root, b)) { in btrfs_search_slot()
2782 err = btrfs_cow_block(trans, root, b, NULL, 0, in btrfs_search_slot()
2785 err = btrfs_cow_block(trans, root, b, in btrfs_search_slot()
2828 err = setup_nodes_for_search(trans, root, p, b, level, in btrfs_search_slot()
2861 err = read_block_for_search(root, p, &b, level, in btrfs_search_slot()
2904 err = split_leaf(trans, root, key, in btrfs_search_slot()
2944 int btrfs_search_old_slot(struct btrfs_root *root, const struct btrfs_key *key, in btrfs_search_old_slot() argument
2947 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_search_old_slot()
2962 return btrfs_search_slot(NULL, root, key, p, 0, 0); in btrfs_search_old_slot()
2966 b = get_old_root(root, time_seq); in btrfs_search_old_slot()
3009 err = read_block_for_search(root, p, &b, level, in btrfs_search_old_slot()
3061 int btrfs_search_slot_for_read(struct btrfs_root *root, in btrfs_search_slot_for_read() argument
3070 ret = btrfs_search_slot(NULL, root, key, p, 0, 0); in btrfs_search_slot_for_read()
3084 ret = btrfs_next_leaf(root, p); in btrfs_search_slot_for_read()
3100 ret = btrfs_prev_leaf(root, p); in btrfs_search_slot_for_read()
3333 struct btrfs_root *root, in insert_new_root() argument
3336 struct btrfs_fs_info *fs_info = root->fs_info; in insert_new_root()
3344 BUG_ON(path->nodes[level-1] != root->node); in insert_new_root()
3352 c = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, in insert_new_root()
3353 &lower_key, level, root->node->start, 0); in insert_new_root()
3357 root_add_used(root, fs_info->nodesize); in insert_new_root()
3365 btrfs_set_header_owner(c, root->root_key.objectid); in insert_new_root()
3379 old = root->node; in insert_new_root()
3380 tree_mod_log_set_root_pointer(root, c, 0); in insert_new_root()
3381 rcu_assign_pointer(root->node, c); in insert_new_root()
3386 add_root_to_dirty_list(root); in insert_new_root()
3448 struct btrfs_root *root, in split_node() argument
3451 struct btrfs_fs_info *fs_info = root->fs_info; in split_node()
3461 if (c == root->node) { in split_node()
3472 ret = insert_new_root(trans, root, path, level + 1); in split_node()
3476 ret = push_nodes_for_insert(trans, root, path, level); in split_node()
3489 split = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, in split_node()
3494 root_add_used(root, fs_info->nodesize); in split_node()
3501 btrfs_set_header_owner(split, root->root_key.objectid); in split_node()
3739 *root, struct btrfs_path *path, in push_leaf_right()
3743 struct btrfs_fs_info *fs_info = root->fs_info; in push_leaf_right()
3778 ret = btrfs_cow_block(trans, root, right, upper, in push_leaf_right()
3973 *root, struct btrfs_path *path, int min_data_size, in push_leaf_left()
3976 struct btrfs_fs_info *fs_info = root->fs_info; in push_leaf_left()
4014 ret = btrfs_cow_block(trans, root, left, in push_leaf_left()
4115 struct btrfs_root *root, in push_for_double_split() argument
4119 struct btrfs_fs_info *fs_info = root->fs_info; in push_for_double_split()
4134 ret = push_leaf_right(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4157 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4176 struct btrfs_root *root, in split_leaf() argument
4187 struct btrfs_fs_info *fs_info = root->fs_info; in split_leaf()
4207 wret = push_leaf_right(trans, root, path, space_needed, in split_leaf()
4216 wret = push_leaf_left(trans, root, path, space_needed, in split_leaf()
4229 ret = insert_new_root(trans, root, path, 1); in split_leaf()
4282 right = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, in split_leaf()
4287 root_add_used(root, fs_info->nodesize); in split_leaf()
4293 btrfs_set_header_owner(right, root->root_key.objectid); in split_leaf()
4338 push_for_double_split(trans, root, path, data_size); in split_leaf()
4346 struct btrfs_root *root, in setup_leaf_for_split() argument
4349 struct btrfs_fs_info *fs_info = root->fs_info; in setup_leaf_for_split()
4376 ret = btrfs_search_slot(trans, root, &key, path, 0, 1); in setup_leaf_for_split()
4401 ret = split_leaf(trans, root, &key, path, ins_len, 1); in setup_leaf_for_split()
4499 struct btrfs_root *root, in btrfs_split_item() argument
4505 ret = setup_leaf_for_split(trans, root, path, in btrfs_split_item()
4510 ret = split_item(root->fs_info, path, new_key, split_offset); in btrfs_split_item()
4523 struct btrfs_root *root, in btrfs_duplicate_item() argument
4533 ret = setup_leaf_for_split(trans, root, path, in btrfs_duplicate_item()
4539 setup_items_for_insert(root, path, new_key, &item_size, in btrfs_duplicate_item()
4725 void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path, in setup_items_for_insert() argument
4729 struct btrfs_fs_info *fs_info = root->fs_info; in setup_items_for_insert()
4818 struct btrfs_root *root, in btrfs_insert_empty_items() argument
4833 ret = btrfs_search_slot(trans, root, cpu_key, path, total_size, 1); in btrfs_insert_empty_items()
4842 setup_items_for_insert(root, path, cpu_key, data_size, in btrfs_insert_empty_items()
4851 int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_insert_item() argument
4863 ret = btrfs_insert_empty_item(trans, root, path, cpu_key, data_size); in btrfs_insert_item()
4880 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path, in del_ptr() argument
4883 struct btrfs_fs_info *fs_info = root->fs_info; in del_ptr()
4906 if (nritems == 0 && parent == root->node) { in del_ptr()
4907 BUG_ON(btrfs_header_level(root->node) != 1); in del_ptr()
4909 btrfs_set_header_level(root->node, 0); in del_ptr()
4930 struct btrfs_root *root, in btrfs_del_leaf() argument
4935 del_ptr(root, path, 1, path->slots[1]); in btrfs_del_leaf()
4943 root_sub_used(root, leaf->len); in btrfs_del_leaf()
4946 btrfs_free_tree_block(trans, root, leaf, 0, 1); in btrfs_del_leaf()
4953 int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_del_items() argument
4956 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_del_items()
5004 if (leaf == root->node) { in btrfs_del_items()
5009 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
5030 wret = push_leaf_left(trans, root, path, 1, 1, in btrfs_del_items()
5037 wret = push_leaf_right(trans, root, path, 1, in btrfs_del_items()
5045 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
5073 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_prev_leaf() argument
5095 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_prev_leaf()
5137 int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, in btrfs_search_forward() argument
5141 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_search_forward()
5153 cur = btrfs_read_lock_root_node(root); in btrfs_search_forward()
5201 sret = btrfs_find_next_key(root, path, min_key, level, in btrfs_search_forward()
5625 int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, in btrfs_find_next_key() argument
5661 ret = btrfs_search_slot(NULL, root, &cur_key, path, in btrfs_find_next_key()
5695 int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_next_leaf() argument
5697 return btrfs_next_old_leaf(root, path, 0); in btrfs_next_leaf()
5700 int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, in btrfs_next_old_leaf() argument
5728 ret = btrfs_search_old_slot(root, &key, path, time_seq); in btrfs_next_old_leaf()
5730 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_next_old_leaf()
5792 ret = read_block_for_search(root, path, &next, level, in btrfs_next_old_leaf()
5842 ret = read_block_for_search(root, path, &next, level, in btrfs_next_old_leaf()
5879 int btrfs_previous_item(struct btrfs_root *root, in btrfs_previous_item() argument
5891 ret = btrfs_prev_leaf(root, path); in btrfs_previous_item()
5922 int btrfs_previous_extent_item(struct btrfs_root *root, in btrfs_previous_extent_item() argument
5933 ret = btrfs_prev_leaf(root, path); in btrfs_previous_extent_item()