Lines Matching refs:root

29 		      *root, struct btrfs_path *path, int level);
31 *root, struct btrfs_key *ins_key,
34 struct btrfs_root *root, struct extent_buffer *dst,
37 struct btrfs_root *root,
40 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 if (test_bit(BTRFS_ROOT_DIRTY, &root->state) || in add_root_to_dirty_list()
217 !test_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state)) in add_root_to_dirty_list()
220 spin_lock(&root->fs_info->trans_lock); in add_root_to_dirty_list()
221 if (!test_and_set_bit(BTRFS_ROOT_DIRTY, &root->state)) { in add_root_to_dirty_list()
223 if (root->objectid == BTRFS_EXTENT_TREE_OBJECTID) in add_root_to_dirty_list()
224 list_move_tail(&root->dirty_list, in add_root_to_dirty_list()
225 &root->fs_info->dirty_cowonly_roots); in add_root_to_dirty_list()
227 list_move(&root->dirty_list, in add_root_to_dirty_list()
228 &root->fs_info->dirty_cowonly_roots); in add_root_to_dirty_list()
230 spin_unlock(&root->fs_info->trans_lock); in add_root_to_dirty_list()
239 struct btrfs_root *root, in btrfs_copy_root() argument
248 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in btrfs_copy_root()
249 trans->transid != root->fs_info->running_transaction->transid); in btrfs_copy_root()
250 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in btrfs_copy_root()
251 trans->transid != root->last_trans); in btrfs_copy_root()
259 cow = btrfs_alloc_tree_block(trans, root, 0, new_root_objectid, in btrfs_copy_root()
275 write_extent_buffer(cow, root->fs_info->fsid, btrfs_header_fsid(), in btrfs_copy_root()
280 ret = btrfs_inc_ref(trans, root, cow, 1); in btrfs_copy_root()
282 ret = btrfs_inc_ref(trans, root, cow, 0); in btrfs_copy_root()
941 tree_mod_log_set_root_pointer(struct btrfs_root *root, in tree_mod_log_set_root_pointer() argument
946 ret = tree_mod_log_insert_root(root->fs_info, root->node, in tree_mod_log_set_root_pointer()
954 int btrfs_block_can_be_shared(struct btrfs_root *root, in btrfs_block_can_be_shared() argument
963 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in btrfs_block_can_be_shared()
964 buf != root->node && buf != root->commit_root && in btrfs_block_can_be_shared()
966 btrfs_root_last_snapshot(&root->root_item) || in btrfs_block_can_be_shared()
970 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in btrfs_block_can_be_shared()
978 struct btrfs_root *root, in update_ref_for_cow() argument
1006 if (btrfs_block_can_be_shared(root, buf)) { in update_ref_for_cow()
1007 ret = btrfs_lookup_extent_info(trans, root, buf->start, in update_ref_for_cow()
1014 btrfs_std_error(root->fs_info, ret); in update_ref_for_cow()
1019 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID || in update_ref_for_cow()
1031 if ((owner == root->root_key.objectid || in update_ref_for_cow()
1032 root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) && in update_ref_for_cow()
1034 ret = btrfs_inc_ref(trans, root, buf, 1); in update_ref_for_cow()
1037 if (root->root_key.objectid == in update_ref_for_cow()
1039 ret = btrfs_dec_ref(trans, root, buf, 0); in update_ref_for_cow()
1041 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
1047 if (root->root_key.objectid == in update_ref_for_cow()
1049 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
1051 ret = btrfs_inc_ref(trans, root, cow, 0); in update_ref_for_cow()
1057 ret = btrfs_set_disk_extent_flags(trans, root, in update_ref_for_cow()
1066 if (root->root_key.objectid == in update_ref_for_cow()
1068 ret = btrfs_inc_ref(trans, root, cow, 1); in update_ref_for_cow()
1070 ret = btrfs_inc_ref(trans, root, cow, 0); in update_ref_for_cow()
1072 ret = btrfs_dec_ref(trans, root, buf, 1); in update_ref_for_cow()
1075 clean_tree_block(trans, root->fs_info, buf); in update_ref_for_cow()
1094 struct btrfs_root *root, in __btrfs_cow_block() argument
1112 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in __btrfs_cow_block()
1113 trans->transid != root->fs_info->running_transaction->transid); in __btrfs_cow_block()
1114 WARN_ON(test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in __btrfs_cow_block()
1115 trans->transid != root->last_trans); in __btrfs_cow_block()
1124 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) { in __btrfs_cow_block()
1132 cow = btrfs_alloc_tree_block(trans, root, parent_start, in __btrfs_cow_block()
1133 root->root_key.objectid, &disk_key, level, in __btrfs_cow_block()
1146 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) in __btrfs_cow_block()
1149 btrfs_set_header_owner(cow, root->root_key.objectid); in __btrfs_cow_block()
1151 write_extent_buffer(cow, root->fs_info->fsid, btrfs_header_fsid(), in __btrfs_cow_block()
1154 ret = update_ref_for_cow(trans, root, buf, cow, &last_ref); in __btrfs_cow_block()
1156 btrfs_abort_transaction(trans, root, ret); in __btrfs_cow_block()
1160 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state)) { in __btrfs_cow_block()
1161 ret = btrfs_reloc_cow_block(trans, root, buf, cow); in __btrfs_cow_block()
1166 if (buf == root->node) { in __btrfs_cow_block()
1168 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID || in __btrfs_cow_block()
1175 tree_mod_log_set_root_pointer(root, cow, 1); in __btrfs_cow_block()
1176 rcu_assign_pointer(root->node, cow); in __btrfs_cow_block()
1178 btrfs_free_tree_block(trans, root, buf, parent_start, in __btrfs_cow_block()
1181 add_root_to_dirty_list(root); in __btrfs_cow_block()
1183 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) in __btrfs_cow_block()
1189 tree_mod_log_insert_key(root->fs_info, parent, parent_slot, in __btrfs_cow_block()
1197 ret = tree_mod_log_free_eb(root->fs_info, buf); in __btrfs_cow_block()
1199 btrfs_abort_transaction(trans, root, ret); in __btrfs_cow_block()
1203 btrfs_free_tree_block(trans, root, buf, parent_start, in __btrfs_cow_block()
1414 get_old_root(struct btrfs_root *root, u64 time_seq) in get_old_root() argument
1424 eb_root = btrfs_read_lock_root_node(root); in get_old_root()
1425 tm = __tree_mod_log_oldest_root(root->fs_info, eb_root, time_seq); in get_old_root()
1437 tm = tree_mod_log_search(root->fs_info, logical, time_seq); in get_old_root()
1441 old = read_tree_block(root, logical, 0); in get_old_root()
1444 btrfs_warn(root->fs_info, in get_old_root()
1453 eb = alloc_dummy_extent_buffer(root->fs_info, logical); in get_old_root()
1473 __tree_mod_log_rewind(root->fs_info, eb, time_seq, tm); in get_old_root()
1476 WARN_ON(btrfs_header_nritems(eb) > BTRFS_NODEPTRS_PER_BLOCK(root)); in get_old_root()
1481 int btrfs_old_root_level(struct btrfs_root *root, u64 time_seq) in btrfs_old_root_level() argument
1485 struct extent_buffer *eb_root = btrfs_root_node(root); in btrfs_old_root_level()
1487 tm = __tree_mod_log_oldest_root(root->fs_info, eb_root, time_seq); in btrfs_old_root_level()
1499 struct btrfs_root *root, in should_cow_block() argument
1502 if (btrfs_test_is_dummy_root(root)) in should_cow_block()
1521 !(root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID && in should_cow_block()
1523 !test_bit(BTRFS_ROOT_FORCE_COW, &root->state)) in should_cow_block()
1534 struct btrfs_root *root, struct extent_buffer *buf, in btrfs_cow_block() argument
1541 if (trans->transaction != root->fs_info->running_transaction) in btrfs_cow_block()
1544 root->fs_info->running_transaction->transid); in btrfs_cow_block()
1546 if (trans->transid != root->fs_info->generation) in btrfs_cow_block()
1548 trans->transid, root->fs_info->generation); in btrfs_cow_block()
1550 if (!should_cow_block(trans, root, buf)) { in btrfs_cow_block()
1561 ret = __btrfs_cow_block(trans, root, buf, parent, in btrfs_cow_block()
1564 trace_btrfs_cow_block(root, buf, *cow_ret); in btrfs_cow_block()
1620 struct btrfs_root *root, struct extent_buffer *parent, in btrfs_realloc_node() argument
1642 WARN_ON(trans->transaction != root->fs_info->running_transaction); in btrfs_realloc_node()
1643 WARN_ON(trans->transid != root->fs_info->generation); in btrfs_realloc_node()
1646 blocksize = root->nodesize; in btrfs_realloc_node()
1680 cur = btrfs_find_tree_block(root->fs_info, blocknr); in btrfs_realloc_node()
1687 cur = read_tree_block(root, blocknr, gen); in btrfs_realloc_node()
1705 err = __btrfs_cow_block(trans, root, cur, parent, i, in btrfs_realloc_node()
1728 static inline unsigned int leaf_data_end(struct btrfs_root *root, in leaf_data_end() argument
1733 return BTRFS_LEAF_DATA_SIZE(root); in leaf_data_end()
1832 static void root_add_used(struct btrfs_root *root, u32 size) in root_add_used() argument
1834 spin_lock(&root->accounting_lock); in root_add_used()
1835 btrfs_set_root_used(&root->root_item, in root_add_used()
1836 btrfs_root_used(&root->root_item) + size); in root_add_used()
1837 spin_unlock(&root->accounting_lock); in root_add_used()
1840 static void root_sub_used(struct btrfs_root *root, u32 size) in root_sub_used() argument
1842 spin_lock(&root->accounting_lock); in root_sub_used()
1843 btrfs_set_root_used(&root->root_item, in root_sub_used()
1844 btrfs_root_used(&root->root_item) - size); in root_sub_used()
1845 spin_unlock(&root->accounting_lock); in root_sub_used()
1852 static noinline struct extent_buffer *read_node_slot(struct btrfs_root *root, in read_node_slot() argument
1865 eb = read_tree_block(root, btrfs_node_blockptr(parent, slot), in read_node_slot()
1881 struct btrfs_root *root, in balance_level() argument
1921 child = read_node_slot(root, mid, 0); in balance_level()
1924 btrfs_std_error(root->fs_info, ret); in balance_level()
1930 ret = btrfs_cow_block(trans, root, child, mid, 0, &child); in balance_level()
1937 tree_mod_log_set_root_pointer(root, child, 1); in balance_level()
1938 rcu_assign_pointer(root->node, child); in balance_level()
1940 add_root_to_dirty_list(root); in balance_level()
1945 clean_tree_block(trans, root->fs_info, mid); in balance_level()
1950 root_sub_used(root, mid->len); in balance_level()
1951 btrfs_free_tree_block(trans, root, mid, 0, 1); in balance_level()
1957 BTRFS_NODEPTRS_PER_BLOCK(root) / 4) in balance_level()
1960 left = read_node_slot(root, parent, pslot - 1); in balance_level()
1964 wret = btrfs_cow_block(trans, root, left, in balance_level()
1971 right = read_node_slot(root, parent, pslot + 1); in balance_level()
1975 wret = btrfs_cow_block(trans, root, right, in balance_level()
1986 wret = push_node_left(trans, root, left, mid, 1); in balance_level()
1995 wret = push_node_left(trans, root, mid, right, 1); in balance_level()
1999 clean_tree_block(trans, root->fs_info, right); in balance_level()
2001 del_ptr(root, path, level + 1, pslot + 1); in balance_level()
2002 root_sub_used(root, right->len); in balance_level()
2003 btrfs_free_tree_block(trans, root, right, 0, 1); in balance_level()
2009 tree_mod_log_set_node_key(root->fs_info, parent, in balance_level()
2027 btrfs_std_error(root->fs_info, ret); in balance_level()
2030 wret = balance_node_right(trans, root, mid, left); in balance_level()
2036 wret = push_node_left(trans, root, left, mid, 1); in balance_level()
2043 clean_tree_block(trans, root->fs_info, mid); in balance_level()
2045 del_ptr(root, path, level + 1, pslot); in balance_level()
2046 root_sub_used(root, mid->len); in balance_level()
2047 btrfs_free_tree_block(trans, root, mid, 0, 1); in balance_level()
2054 tree_mod_log_set_node_key(root->fs_info, parent, in balance_level()
2099 struct btrfs_root *root, in push_nodes_for_insert() argument
2125 left = read_node_slot(root, parent, pslot - 1); in push_nodes_for_insert()
2135 if (left_nr >= BTRFS_NODEPTRS_PER_BLOCK(root) - 1) { in push_nodes_for_insert()
2138 ret = btrfs_cow_block(trans, root, left, parent, in push_nodes_for_insert()
2143 wret = push_node_left(trans, root, in push_nodes_for_insert()
2153 tree_mod_log_set_node_key(root->fs_info, parent, in push_nodes_for_insert()
2175 right = read_node_slot(root, parent, pslot + 1); in push_nodes_for_insert()
2187 if (right_nr >= BTRFS_NODEPTRS_PER_BLOCK(root) - 1) { in push_nodes_for_insert()
2190 ret = btrfs_cow_block(trans, root, right, in push_nodes_for_insert()
2196 wret = balance_node_right(trans, root, in push_nodes_for_insert()
2206 tree_mod_log_set_node_key(root->fs_info, parent, in push_nodes_for_insert()
2234 static void reada_for_search(struct btrfs_root *root, in reada_for_search() argument
2260 blocksize = root->nodesize; in reada_for_search()
2261 eb = btrfs_find_tree_block(root->fs_info, search); in reada_for_search()
2291 readahead_tree_block(root, search); in reada_for_search()
2300 static noinline void reada_for_balance(struct btrfs_root *root, in reada_for_balance() argument
2321 eb = btrfs_find_tree_block(root->fs_info, block1); in reada_for_balance()
2334 eb = btrfs_find_tree_block(root->fs_info, block2); in reada_for_balance()
2341 readahead_tree_block(root, block1); in reada_for_balance()
2343 readahead_tree_block(root, block2); in reada_for_balance()
2439 struct btrfs_root *root, struct btrfs_path *p, in read_block_for_search() argument
2452 tmp = btrfs_find_tree_block(root->fs_info, blocknr); in read_block_for_search()
2491 reada_for_search(root, p, level, slot, key->objectid); in read_block_for_search()
2496 tmp = read_tree_block(root, blocknr, 0); in read_block_for_search()
2522 struct btrfs_root *root, struct btrfs_path *p, in setup_nodes_for_search() argument
2528 BTRFS_NODEPTRS_PER_BLOCK(root) - 3) { in setup_nodes_for_search()
2538 reada_for_balance(root, p, level); in setup_nodes_for_search()
2539 sret = split_node(trans, root, p, level); in setup_nodes_for_search()
2549 BTRFS_NODEPTRS_PER_BLOCK(root) / 2) { in setup_nodes_for_search()
2559 reada_for_balance(root, p, level); in setup_nodes_for_search()
2560 sret = balance_level(trans, root, p, level); in setup_nodes_for_search()
2665 *root, struct btrfs_key *key, struct btrfs_path *p, int in btrfs_search_slot()
2723 down_read(&root->fs_info->commit_root_sem); in btrfs_search_slot()
2724 b = root->commit_root; in btrfs_search_slot()
2728 up_read(&root->fs_info->commit_root_sem); in btrfs_search_slot()
2733 b = btrfs_root_node(root); in btrfs_search_slot()
2739 b = btrfs_read_lock_root_node(root); in btrfs_search_slot()
2745 b = btrfs_lock_root_node(root); in btrfs_search_slot()
2770 if (!should_cow_block(trans, root, b)) in btrfs_search_slot()
2787 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(trans, root, p, in btrfs_search_slot()
2896 btrfs_leaf_free_space(root, b) < ins_len) { 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, struct btrfs_key *key, in btrfs_search_old_slot() argument
2961 return btrfs_search_slot(NULL, root, key, p, 0, 0); in btrfs_search_old_slot()
2965 b = get_old_root(root, time_seq); in btrfs_search_old_slot()
3004 err = read_block_for_search(NULL, root, p, &b, level, in btrfs_search_old_slot()
3021 b = tree_mod_log_rewind(root->fs_info, p, b, time_seq); in btrfs_search_old_slot()
3056 int btrfs_search_slot_for_read(struct btrfs_root *root, in btrfs_search_slot_for_read() argument
3064 ret = btrfs_search_slot(NULL, root, key, p, 0, 0); in btrfs_search_slot_for_read()
3078 ret = btrfs_next_leaf(root, p); in btrfs_search_slot_for_read()
3094 ret = btrfs_prev_leaf(root, p); in btrfs_search_slot_for_read()
3188 struct btrfs_root *root, struct extent_buffer *dst, in push_node_left() argument
3198 push_items = BTRFS_NODEPTRS_PER_BLOCK(root) - dst_nritems; in push_node_left()
3223 ret = tree_mod_log_eb_copy(root->fs_info, dst, src, dst_nritems, 0, in push_node_left()
3226 btrfs_abort_transaction(trans, root, ret); in push_node_left()
3262 struct btrfs_root *root, in balance_node_right() argument
3277 push_items = BTRFS_NODEPTRS_PER_BLOCK(root) - dst_nritems; in balance_node_right()
3292 tree_mod_log_eb_move(root->fs_info, dst, push_items, 0, dst_nritems); in balance_node_right()
3298 ret = tree_mod_log_eb_copy(root->fs_info, dst, src, 0, in balance_node_right()
3301 btrfs_abort_transaction(trans, root, ret); in balance_node_right()
3326 struct btrfs_root *root, in insert_new_root() argument
3336 BUG_ON(path->nodes[level-1] != root->node); in insert_new_root()
3344 c = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, in insert_new_root()
3345 &lower_key, level, root->node->start, 0); in insert_new_root()
3349 root_add_used(root, root->nodesize); in insert_new_root()
3357 btrfs_set_header_owner(c, root->root_key.objectid); in insert_new_root()
3359 write_extent_buffer(c, root->fs_info->fsid, btrfs_header_fsid(), in insert_new_root()
3362 write_extent_buffer(c, root->fs_info->chunk_tree_uuid, in insert_new_root()
3374 old = root->node; in insert_new_root()
3375 tree_mod_log_set_root_pointer(root, c, 0); in insert_new_root()
3376 rcu_assign_pointer(root->node, c); in insert_new_root()
3381 add_root_to_dirty_list(root); in insert_new_root()
3397 struct btrfs_root *root, struct btrfs_path *path, in insert_ptr() argument
3410 BUG_ON(nritems == BTRFS_NODEPTRS_PER_BLOCK(root)); in insert_ptr()
3413 tree_mod_log_eb_move(root->fs_info, lower, slot + 1, in insert_ptr()
3421 ret = tree_mod_log_insert_key(root->fs_info, lower, slot, in insert_ptr()
3443 struct btrfs_root *root, in split_node() argument
3455 if (c == root->node) { in split_node()
3466 ret = insert_new_root(trans, root, path, level + 1); in split_node()
3470 ret = push_nodes_for_insert(trans, root, path, level); in split_node()
3473 BTRFS_NODEPTRS_PER_BLOCK(root) - 3) in split_node()
3483 split = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, in split_node()
3488 root_add_used(root, root->nodesize); in split_node()
3495 btrfs_set_header_owner(split, root->root_key.objectid); in split_node()
3496 write_extent_buffer(split, root->fs_info->fsid, in split_node()
3498 write_extent_buffer(split, root->fs_info->chunk_tree_uuid, in split_node()
3502 ret = tree_mod_log_eb_copy(root->fs_info, split, c, 0, in split_node()
3505 btrfs_abort_transaction(trans, root, ret); in split_node()
3519 insert_ptr(trans, root, path, &disk_key, split->start, in split_node()
3567 noinline int btrfs_leaf_free_space(struct btrfs_root *root, in btrfs_leaf_free_space() argument
3572 ret = BTRFS_LEAF_DATA_SIZE(root) - leaf_space_used(leaf, 0, nritems); in btrfs_leaf_free_space()
3574 btrfs_crit(root->fs_info, in btrfs_leaf_free_space()
3576 ret, (unsigned long) BTRFS_LEAF_DATA_SIZE(root), in btrfs_leaf_free_space()
3587 struct btrfs_root *root, in __push_leaf_right() argument
3627 int space = btrfs_leaf_free_space(root, left); in __push_leaf_right()
3656 push_space -= leaf_data_end(root, left); in __push_leaf_right()
3659 data_end = leaf_data_end(root, right); in __push_leaf_right()
3663 BTRFS_LEAF_DATA_SIZE(root) - data_end); in __push_leaf_right()
3667 BTRFS_LEAF_DATA_SIZE(root) - push_space, in __push_leaf_right()
3668 btrfs_leaf_data(left) + leaf_data_end(root, left), in __push_leaf_right()
3683 push_space = BTRFS_LEAF_DATA_SIZE(root); in __push_leaf_right()
3696 clean_tree_block(trans, root->fs_info, left); in __push_leaf_right()
3708 clean_tree_block(trans, root->fs_info, path->nodes[0]); in __push_leaf_right()
3736 *root, struct btrfs_path *path, in push_leaf_right()
3758 right = read_node_slot(root, upper, slot + 1); in push_leaf_right()
3765 free_space = btrfs_leaf_free_space(root, right); in push_leaf_right()
3770 ret = btrfs_cow_block(trans, root, right, upper, in push_leaf_right()
3775 free_space = btrfs_leaf_free_space(root, right); in push_leaf_right()
3796 return __push_leaf_right(trans, root, path, min_data_size, empty, in push_leaf_right()
3813 struct btrfs_root *root, in __push_leaf_left() argument
3846 int space = btrfs_leaf_free_space(root, right); in __push_leaf_left()
3875 push_space = BTRFS_LEAF_DATA_SIZE(root) - in __push_leaf_left()
3879 leaf_data_end(root, left) - push_space, in __push_leaf_left()
3894 ioff - (BTRFS_LEAF_DATA_SIZE(root) - old_left_item_size), in __push_leaf_left()
3906 leaf_data_end(root, right); in __push_leaf_left()
3908 BTRFS_LEAF_DATA_SIZE(root) - push_space, in __push_leaf_left()
3910 leaf_data_end(root, right), push_space); in __push_leaf_left()
3919 push_space = BTRFS_LEAF_DATA_SIZE(root); in __push_leaf_left()
3932 clean_tree_block(trans, root->fs_info, right); in __push_leaf_left()
3935 fixup_low_keys(root->fs_info, path, &disk_key, 1); in __push_leaf_left()
3966 *root, struct btrfs_path *path, int min_data_size, in push_leaf_left()
3988 left = read_node_slot(root, path->nodes[1], slot - 1); in push_leaf_left()
3995 free_space = btrfs_leaf_free_space(root, left); in push_leaf_left()
4002 ret = btrfs_cow_block(trans, root, left, in push_leaf_left()
4011 free_space = btrfs_leaf_free_space(root, left); in push_leaf_left()
4017 return __push_leaf_left(trans, root, path, min_data_size, in push_leaf_left()
4031 struct btrfs_root *root, in copy_for_split() argument
4047 data_copy_size = btrfs_item_end_nr(l, mid) - leaf_data_end(root, l); in copy_for_split()
4054 btrfs_leaf_data(right) + BTRFS_LEAF_DATA_SIZE(root) - in copy_for_split()
4056 leaf_data_end(root, l), data_copy_size); in copy_for_split()
4058 rt_data_off = BTRFS_LEAF_DATA_SIZE(root) - in copy_for_split()
4072 insert_ptr(trans, root, path, &disk_key, right->start, in copy_for_split()
4104 struct btrfs_root *root, in push_for_double_split() argument
4116 space_needed -= btrfs_leaf_free_space(root, path->nodes[0]); in push_for_double_split()
4122 ret = push_leaf_right(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4137 if (btrfs_leaf_free_space(root, path->nodes[0]) >= data_size) in push_for_double_split()
4142 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4161 struct btrfs_root *root, in split_leaf() argument
4172 struct btrfs_fs_info *fs_info = root->fs_info; in split_leaf()
4182 sizeof(struct btrfs_item) > BTRFS_LEAF_DATA_SIZE(root)) in split_leaf()
4190 space_needed -= btrfs_leaf_free_space(root, l); in split_leaf()
4192 wret = push_leaf_right(trans, root, path, space_needed, in split_leaf()
4197 wret = push_leaf_left(trans, root, path, space_needed, in split_leaf()
4205 if (btrfs_leaf_free_space(root, l) >= data_size) in split_leaf()
4210 ret = insert_new_root(trans, root, path, 1); in split_leaf()
4224 BTRFS_LEAF_DATA_SIZE(root)) { in split_leaf()
4231 data_size > BTRFS_LEAF_DATA_SIZE(root)) { in split_leaf()
4240 BTRFS_LEAF_DATA_SIZE(root)) { in split_leaf()
4249 data_size > BTRFS_LEAF_DATA_SIZE(root)) { in split_leaf()
4263 right = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, in split_leaf()
4268 root_add_used(root, root->nodesize); in split_leaf()
4274 btrfs_set_header_owner(right, root->root_key.objectid); in split_leaf()
4286 insert_ptr(trans, root, path, &disk_key, right->start, in split_leaf()
4295 insert_ptr(trans, root, path, &disk_key, right->start, in split_leaf()
4308 copy_for_split(trans, root, path, l, right, slot, mid, nritems); in split_leaf()
4319 push_for_double_split(trans, root, path, data_size); in split_leaf()
4321 if (btrfs_leaf_free_space(root, path->nodes[0]) >= data_size) in split_leaf()
4327 struct btrfs_root *root, in setup_leaf_for_split() argument
4343 if (btrfs_leaf_free_space(root, leaf) >= ins_len) in setup_leaf_for_split()
4356 ret = btrfs_search_slot(trans, root, &key, path, 0, 1); in setup_leaf_for_split()
4370 if (btrfs_leaf_free_space(root, path->nodes[0]) >= ins_len) in setup_leaf_for_split()
4381 ret = split_leaf(trans, root, &key, path, ins_len, 1); in setup_leaf_for_split()
4394 struct btrfs_root *root, in split_item() argument
4410 BUG_ON(btrfs_leaf_free_space(root, leaf) < sizeof(struct btrfs_item)); in split_item()
4459 BUG_ON(btrfs_leaf_free_space(root, leaf) < 0); in split_item()
4480 struct btrfs_root *root, in btrfs_split_item() argument
4486 ret = setup_leaf_for_split(trans, root, path, in btrfs_split_item()
4491 ret = split_item(trans, root, path, new_key, split_offset); in btrfs_split_item()
4504 struct btrfs_root *root, in btrfs_duplicate_item() argument
4514 ret = setup_leaf_for_split(trans, root, path, in btrfs_duplicate_item()
4520 setup_items_for_insert(root, path, new_key, &item_size, in btrfs_duplicate_item()
4537 void btrfs_truncate_item(struct btrfs_root *root, struct btrfs_path *path, in btrfs_truncate_item() argument
4561 data_end = leaf_data_end(root, leaf); in btrfs_truncate_item()
4620 fixup_low_keys(root->fs_info, path, &disk_key, 1); in btrfs_truncate_item()
4627 if (btrfs_leaf_free_space(root, leaf) < 0) { in btrfs_truncate_item()
4628 btrfs_print_leaf(root, leaf); in btrfs_truncate_item()
4636 void btrfs_extend_item(struct btrfs_root *root, struct btrfs_path *path, in btrfs_extend_item() argument
4654 data_end = leaf_data_end(root, leaf); in btrfs_extend_item()
4656 if (btrfs_leaf_free_space(root, leaf) < data_size) { in btrfs_extend_item()
4657 btrfs_print_leaf(root, leaf); in btrfs_extend_item()
4665 btrfs_print_leaf(root, leaf); in btrfs_extend_item()
4666 btrfs_crit(root->fs_info, "slot %d too large, nritems %d", in btrfs_extend_item()
4695 if (btrfs_leaf_free_space(root, leaf) < 0) { in btrfs_extend_item()
4696 btrfs_print_leaf(root, leaf); in btrfs_extend_item()
4706 void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path, in setup_items_for_insert() argument
4721 fixup_low_keys(root->fs_info, path, &disk_key, 1); in setup_items_for_insert()
4731 data_end = leaf_data_end(root, leaf); in setup_items_for_insert()
4733 if (btrfs_leaf_free_space(root, leaf) < total_size) { in setup_items_for_insert()
4734 btrfs_print_leaf(root, leaf); in setup_items_for_insert()
4735 btrfs_crit(root->fs_info, "not enough freespace need %u have %d", in setup_items_for_insert()
4736 total_size, btrfs_leaf_free_space(root, leaf)); in setup_items_for_insert()
4744 btrfs_print_leaf(root, leaf); in setup_items_for_insert()
4745 btrfs_crit(root->fs_info, "slot %d old_data %d data_end %d", in setup_items_for_insert()
4787 if (btrfs_leaf_free_space(root, leaf) < 0) { in setup_items_for_insert()
4788 btrfs_print_leaf(root, leaf); in setup_items_for_insert()
4798 struct btrfs_root *root, in btrfs_insert_empty_items() argument
4813 ret = btrfs_search_slot(trans, root, cpu_key, path, total_size, 1); in btrfs_insert_empty_items()
4822 setup_items_for_insert(root, path, cpu_key, data_size, in btrfs_insert_empty_items()
4832 *root, struct btrfs_key *cpu_key, void *data, u32 in btrfs_insert_item()
4843 ret = btrfs_insert_empty_item(trans, root, path, cpu_key, data_size); in btrfs_insert_item()
4860 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path, in del_ptr() argument
4870 tree_mod_log_eb_move(root->fs_info, parent, slot, in del_ptr()
4878 ret = tree_mod_log_insert_key(root->fs_info, parent, slot, in del_ptr()
4885 if (nritems == 0 && parent == root->node) { in del_ptr()
4886 BUG_ON(btrfs_header_level(root->node) != 1); in del_ptr()
4888 btrfs_set_header_level(root->node, 0); in del_ptr()
4893 fixup_low_keys(root->fs_info, path, &disk_key, level + 1); in del_ptr()
4909 struct btrfs_root *root, in btrfs_del_leaf() argument
4914 del_ptr(root, path, 1, path->slots[1]); in btrfs_del_leaf()
4922 root_sub_used(root, leaf->len); in btrfs_del_leaf()
4925 btrfs_free_tree_block(trans, root, leaf, 0, 1); in btrfs_del_leaf()
4932 int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_del_items() argument
4956 int data_end = leaf_data_end(root, leaf); in btrfs_del_items()
4982 if (leaf == root->node) { in btrfs_del_items()
4986 clean_tree_block(trans, root->fs_info, leaf); in btrfs_del_items()
4987 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
4995 fixup_low_keys(root->fs_info, path, &disk_key, 1); in btrfs_del_items()
4999 if (used < BTRFS_LEAF_DATA_SIZE(root) / 3) { in btrfs_del_items()
5008 wret = push_leaf_left(trans, root, path, 1, 1, in btrfs_del_items()
5015 wret = push_leaf_right(trans, root, path, 1, in btrfs_del_items()
5023 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
5051 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_prev_leaf() argument
5073 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_prev_leaf()
5115 int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, in btrfs_search_forward() argument
5130 cur = btrfs_read_lock_root_node(root); in btrfs_search_forward()
5178 sret = btrfs_find_next_key(root, path, min_key, level, in btrfs_search_forward()
5195 cur = read_node_slot(root, cur, slot); in btrfs_search_forward()
5215 static void tree_move_down(struct btrfs_root *root, in tree_move_down() argument
5220 path->nodes[*level - 1] = read_node_slot(root, path->nodes[*level], in tree_move_down()
5226 static int tree_move_next_or_upnext(struct btrfs_root *root, in tree_move_next_or_upnext() argument
5257 static int tree_advance(struct btrfs_root *root, in tree_advance() argument
5266 ret = tree_move_next_or_upnext(root, path, level, root_level); in tree_advance()
5268 tree_move_down(root, path, level, root_level); in tree_advance()
5578 int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, in btrfs_find_next_key() argument
5614 ret = btrfs_search_slot(NULL, root, &cur_key, path, in btrfs_find_next_key()
5648 int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_next_leaf() argument
5650 return btrfs_next_old_leaf(root, path, 0); in btrfs_next_leaf()
5653 int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, in btrfs_next_old_leaf() argument
5681 ret = btrfs_search_old_slot(root, &key, path, time_seq); in btrfs_next_old_leaf()
5683 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_next_old_leaf()
5745 ret = read_block_for_search(NULL, root, path, &next, level, in btrfs_next_old_leaf()
5795 ret = read_block_for_search(NULL, root, path, &next, level, in btrfs_next_old_leaf()
5832 int btrfs_previous_item(struct btrfs_root *root, in btrfs_previous_item() argument
5844 ret = btrfs_prev_leaf(root, path); in btrfs_previous_item()
5875 int btrfs_previous_extent_item(struct btrfs_root *root, in btrfs_previous_extent_item() argument
5886 ret = btrfs_prev_leaf(root, path); in btrfs_previous_extent_item()