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, NULL); 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()
1163 btrfs_abort_transaction(trans, root, ret); in __btrfs_cow_block()
1168 if (buf == root->node) { in __btrfs_cow_block()
1170 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID || in __btrfs_cow_block()
1177 tree_mod_log_set_root_pointer(root, cow, 1); in __btrfs_cow_block()
1178 rcu_assign_pointer(root->node, cow); in __btrfs_cow_block()
1180 btrfs_free_tree_block(trans, root, buf, parent_start, in __btrfs_cow_block()
1183 add_root_to_dirty_list(root); in __btrfs_cow_block()
1185 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) in __btrfs_cow_block()
1191 tree_mod_log_insert_key(root->fs_info, parent, parent_slot, in __btrfs_cow_block()
1199 ret = tree_mod_log_free_eb(root->fs_info, buf); in __btrfs_cow_block()
1201 btrfs_abort_transaction(trans, root, ret); in __btrfs_cow_block()
1205 btrfs_free_tree_block(trans, root, buf, parent_start, in __btrfs_cow_block()
1416 get_old_root(struct btrfs_root *root, u64 time_seq) in get_old_root() argument
1426 eb_root = btrfs_read_lock_root_node(root); in get_old_root()
1427 tm = __tree_mod_log_oldest_root(root->fs_info, eb_root, time_seq); in get_old_root()
1439 tm = tree_mod_log_search(root->fs_info, logical, time_seq); in get_old_root()
1443 old = read_tree_block(root, logical, 0); in get_old_root()
1447 btrfs_warn(root->fs_info, in get_old_root()
1456 eb = alloc_dummy_extent_buffer(root->fs_info, logical); in get_old_root()
1476 __tree_mod_log_rewind(root->fs_info, eb, time_seq, tm); in get_old_root()
1479 WARN_ON(btrfs_header_nritems(eb) > BTRFS_NODEPTRS_PER_BLOCK(root)); in get_old_root()
1484 int btrfs_old_root_level(struct btrfs_root *root, u64 time_seq) in btrfs_old_root_level() argument
1488 struct extent_buffer *eb_root = btrfs_root_node(root); in btrfs_old_root_level()
1490 tm = __tree_mod_log_oldest_root(root->fs_info, eb_root, time_seq); in btrfs_old_root_level()
1502 struct btrfs_root *root, in should_cow_block() argument
1505 if (btrfs_test_is_dummy_root(root)) in should_cow_block()
1524 !(root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID && in should_cow_block()
1526 !test_bit(BTRFS_ROOT_FORCE_COW, &root->state)) in should_cow_block()
1537 struct btrfs_root *root, struct extent_buffer *buf, in btrfs_cow_block() argument
1544 if (trans->transaction != root->fs_info->running_transaction) in btrfs_cow_block()
1547 root->fs_info->running_transaction->transid); in btrfs_cow_block()
1549 if (trans->transid != root->fs_info->generation) in btrfs_cow_block()
1551 trans->transid, root->fs_info->generation); in btrfs_cow_block()
1553 if (!should_cow_block(trans, root, buf)) { in btrfs_cow_block()
1564 ret = __btrfs_cow_block(trans, root, buf, parent, in btrfs_cow_block()
1567 trace_btrfs_cow_block(root, buf, *cow_ret); in btrfs_cow_block()
1623 struct btrfs_root *root, struct extent_buffer *parent, in btrfs_realloc_node() argument
1645 WARN_ON(trans->transaction != root->fs_info->running_transaction); in btrfs_realloc_node()
1646 WARN_ON(trans->transid != root->fs_info->generation); in btrfs_realloc_node()
1649 blocksize = root->nodesize; in btrfs_realloc_node()
1683 cur = btrfs_find_tree_block(root->fs_info, blocknr); in btrfs_realloc_node()
1690 cur = read_tree_block(root, blocknr, gen); in btrfs_realloc_node()
1710 err = __btrfs_cow_block(trans, root, cur, parent, i, in btrfs_realloc_node()
1733 static inline unsigned int leaf_data_end(struct btrfs_root *root, in leaf_data_end() argument
1738 return BTRFS_LEAF_DATA_SIZE(root); in leaf_data_end()
1837 static void root_add_used(struct btrfs_root *root, u32 size) in root_add_used() argument
1839 spin_lock(&root->accounting_lock); in root_add_used()
1840 btrfs_set_root_used(&root->root_item, in root_add_used()
1841 btrfs_root_used(&root->root_item) + size); in root_add_used()
1842 spin_unlock(&root->accounting_lock); in root_add_used()
1845 static void root_sub_used(struct btrfs_root *root, u32 size) in root_sub_used() argument
1847 spin_lock(&root->accounting_lock); in root_sub_used()
1848 btrfs_set_root_used(&root->root_item, in root_sub_used()
1849 btrfs_root_used(&root->root_item) - size); in root_sub_used()
1850 spin_unlock(&root->accounting_lock); in root_sub_used()
1857 static noinline struct extent_buffer *read_node_slot(struct btrfs_root *root, in read_node_slot() argument
1870 eb = read_tree_block(root, btrfs_node_blockptr(parent, slot), in read_node_slot()
1887 struct btrfs_root *root, in balance_level() argument
1927 child = read_node_slot(root, mid, 0); in balance_level()
1930 btrfs_std_error(root->fs_info, ret, NULL); in balance_level()
1936 ret = btrfs_cow_block(trans, root, child, mid, 0, &child); in balance_level()
1943 tree_mod_log_set_root_pointer(root, child, 1); in balance_level()
1944 rcu_assign_pointer(root->node, child); in balance_level()
1946 add_root_to_dirty_list(root); in balance_level()
1951 clean_tree_block(trans, root->fs_info, mid); in balance_level()
1956 root_sub_used(root, mid->len); in balance_level()
1957 btrfs_free_tree_block(trans, root, mid, 0, 1); in balance_level()
1963 BTRFS_NODEPTRS_PER_BLOCK(root) / 4) in balance_level()
1966 left = read_node_slot(root, parent, pslot - 1); in balance_level()
1970 wret = btrfs_cow_block(trans, root, left, in balance_level()
1977 right = read_node_slot(root, parent, pslot + 1); in balance_level()
1981 wret = btrfs_cow_block(trans, root, right, in balance_level()
1992 wret = push_node_left(trans, root, left, mid, 1); in balance_level()
2001 wret = push_node_left(trans, root, mid, right, 1); in balance_level()
2005 clean_tree_block(trans, root->fs_info, right); in balance_level()
2007 del_ptr(root, path, level + 1, pslot + 1); in balance_level()
2008 root_sub_used(root, right->len); in balance_level()
2009 btrfs_free_tree_block(trans, root, right, 0, 1); in balance_level()
2015 tree_mod_log_set_node_key(root->fs_info, parent, in balance_level()
2033 btrfs_std_error(root->fs_info, ret, NULL); in balance_level()
2036 wret = balance_node_right(trans, root, mid, left); in balance_level()
2042 wret = push_node_left(trans, root, left, mid, 1); in balance_level()
2049 clean_tree_block(trans, root->fs_info, mid); in balance_level()
2051 del_ptr(root, path, level + 1, pslot); in balance_level()
2052 root_sub_used(root, mid->len); in balance_level()
2053 btrfs_free_tree_block(trans, root, mid, 0, 1); in balance_level()
2060 tree_mod_log_set_node_key(root->fs_info, parent, in balance_level()
2105 struct btrfs_root *root, in push_nodes_for_insert() argument
2131 left = read_node_slot(root, parent, pslot - 1); in push_nodes_for_insert()
2141 if (left_nr >= BTRFS_NODEPTRS_PER_BLOCK(root) - 1) { in push_nodes_for_insert()
2144 ret = btrfs_cow_block(trans, root, left, parent, in push_nodes_for_insert()
2149 wret = push_node_left(trans, root, in push_nodes_for_insert()
2159 tree_mod_log_set_node_key(root->fs_info, parent, in push_nodes_for_insert()
2181 right = read_node_slot(root, parent, pslot + 1); in push_nodes_for_insert()
2193 if (right_nr >= BTRFS_NODEPTRS_PER_BLOCK(root) - 1) { in push_nodes_for_insert()
2196 ret = btrfs_cow_block(trans, root, right, in push_nodes_for_insert()
2202 wret = balance_node_right(trans, root, in push_nodes_for_insert()
2212 tree_mod_log_set_node_key(root->fs_info, parent, in push_nodes_for_insert()
2240 static void reada_for_search(struct btrfs_root *root, in reada_for_search() argument
2266 blocksize = root->nodesize; in reada_for_search()
2267 eb = btrfs_find_tree_block(root->fs_info, search); in reada_for_search()
2297 readahead_tree_block(root, search); in reada_for_search()
2306 static noinline void reada_for_balance(struct btrfs_root *root, in reada_for_balance() argument
2327 eb = btrfs_find_tree_block(root->fs_info, block1); in reada_for_balance()
2340 eb = btrfs_find_tree_block(root->fs_info, block2); in reada_for_balance()
2347 readahead_tree_block(root, block1); in reada_for_balance()
2349 readahead_tree_block(root, block2); in reada_for_balance()
2445 struct btrfs_root *root, struct btrfs_path *p, in read_block_for_search() argument
2458 tmp = btrfs_find_tree_block(root->fs_info, blocknr); in read_block_for_search()
2497 reada_for_search(root, p, level, slot, key->objectid); in read_block_for_search()
2502 tmp = read_tree_block(root, blocknr, 0); in read_block_for_search()
2528 struct btrfs_root *root, struct btrfs_path *p, in setup_nodes_for_search() argument
2534 BTRFS_NODEPTRS_PER_BLOCK(root) - 3) { in setup_nodes_for_search()
2544 reada_for_balance(root, p, level); in setup_nodes_for_search()
2545 sret = split_node(trans, root, p, level); in setup_nodes_for_search()
2555 BTRFS_NODEPTRS_PER_BLOCK(root) / 2) { in setup_nodes_for_search()
2565 reada_for_balance(root, p, level); in setup_nodes_for_search()
2566 sret = balance_level(trans, root, p, level); in setup_nodes_for_search()
2671 *root, struct btrfs_key *key, struct btrfs_path *p, int in btrfs_search_slot()
2729 down_read(&root->fs_info->commit_root_sem); in btrfs_search_slot()
2730 b = root->commit_root; in btrfs_search_slot()
2734 up_read(&root->fs_info->commit_root_sem); in btrfs_search_slot()
2739 b = btrfs_root_node(root); in btrfs_search_slot()
2745 b = btrfs_read_lock_root_node(root); in btrfs_search_slot()
2751 b = btrfs_lock_root_node(root); in btrfs_search_slot()
2776 if (!should_cow_block(trans, root, b)) in btrfs_search_slot()
2793 err = btrfs_cow_block(trans, root, b, in btrfs_search_slot()
2834 err = setup_nodes_for_search(trans, root, p, b, level, in btrfs_search_slot()
2867 err = read_block_for_search(trans, root, p, in btrfs_search_slot()
2902 btrfs_leaf_free_space(root, b) < ins_len) { in btrfs_search_slot()
2910 err = split_leaf(trans, root, key, in btrfs_search_slot()
2950 int btrfs_search_old_slot(struct btrfs_root *root, struct btrfs_key *key, in btrfs_search_old_slot() argument
2967 return btrfs_search_slot(NULL, root, key, p, 0, 0); in btrfs_search_old_slot()
2971 b = get_old_root(root, time_seq); in btrfs_search_old_slot()
3010 err = read_block_for_search(NULL, root, p, &b, level, in btrfs_search_old_slot()
3027 b = tree_mod_log_rewind(root->fs_info, p, b, time_seq); in btrfs_search_old_slot()
3062 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()
3194 struct btrfs_root *root, struct extent_buffer *dst, in push_node_left() argument
3204 push_items = BTRFS_NODEPTRS_PER_BLOCK(root) - dst_nritems; in push_node_left()
3229 ret = tree_mod_log_eb_copy(root->fs_info, dst, src, dst_nritems, 0, in push_node_left()
3232 btrfs_abort_transaction(trans, root, ret); in push_node_left()
3268 struct btrfs_root *root, in balance_node_right() argument
3283 push_items = BTRFS_NODEPTRS_PER_BLOCK(root) - dst_nritems; in balance_node_right()
3298 tree_mod_log_eb_move(root->fs_info, dst, push_items, 0, dst_nritems); in balance_node_right()
3304 ret = tree_mod_log_eb_copy(root->fs_info, dst, src, 0, in balance_node_right()
3307 btrfs_abort_transaction(trans, root, ret); in balance_node_right()
3332 struct btrfs_root *root, in insert_new_root() argument
3342 BUG_ON(path->nodes[level-1] != root->node); in insert_new_root()
3350 c = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, in insert_new_root()
3351 &lower_key, level, root->node->start, 0); in insert_new_root()
3355 root_add_used(root, root->nodesize); in insert_new_root()
3363 btrfs_set_header_owner(c, root->root_key.objectid); in insert_new_root()
3365 write_extent_buffer(c, root->fs_info->fsid, btrfs_header_fsid(), in insert_new_root()
3368 write_extent_buffer(c, root->fs_info->chunk_tree_uuid, in insert_new_root()
3380 old = root->node; in insert_new_root()
3381 tree_mod_log_set_root_pointer(root, c, 0); in insert_new_root()
3382 rcu_assign_pointer(root->node, c); in insert_new_root()
3387 add_root_to_dirty_list(root); in insert_new_root()
3403 struct btrfs_root *root, struct btrfs_path *path, in insert_ptr() argument
3416 BUG_ON(nritems == BTRFS_NODEPTRS_PER_BLOCK(root)); in insert_ptr()
3419 tree_mod_log_eb_move(root->fs_info, lower, slot + 1, in insert_ptr()
3427 ret = tree_mod_log_insert_key(root->fs_info, lower, slot, in insert_ptr()
3449 struct btrfs_root *root, in split_node() argument
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()
3479 BTRFS_NODEPTRS_PER_BLOCK(root) - 3) in split_node()
3489 split = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, in split_node()
3494 root_add_used(root, root->nodesize); in split_node()
3501 btrfs_set_header_owner(split, root->root_key.objectid); in split_node()
3502 write_extent_buffer(split, root->fs_info->fsid, in split_node()
3504 write_extent_buffer(split, root->fs_info->chunk_tree_uuid, in split_node()
3508 ret = tree_mod_log_eb_copy(root->fs_info, split, c, 0, in split_node()
3511 btrfs_abort_transaction(trans, root, ret); in split_node()
3525 insert_ptr(trans, root, path, &disk_key, split->start, in split_node()
3573 noinline int btrfs_leaf_free_space(struct btrfs_root *root, in btrfs_leaf_free_space() argument
3578 ret = BTRFS_LEAF_DATA_SIZE(root) - leaf_space_used(leaf, 0, nritems); in btrfs_leaf_free_space()
3580 btrfs_crit(root->fs_info, in btrfs_leaf_free_space()
3582 ret, (unsigned long) BTRFS_LEAF_DATA_SIZE(root), in btrfs_leaf_free_space()
3593 struct btrfs_root *root, in __push_leaf_right() argument
3633 int space = btrfs_leaf_free_space(root, left); in __push_leaf_right()
3662 push_space -= leaf_data_end(root, left); in __push_leaf_right()
3665 data_end = leaf_data_end(root, right); in __push_leaf_right()
3669 BTRFS_LEAF_DATA_SIZE(root) - data_end); in __push_leaf_right()
3673 BTRFS_LEAF_DATA_SIZE(root) - push_space, in __push_leaf_right()
3674 btrfs_leaf_data(left) + leaf_data_end(root, left), in __push_leaf_right()
3689 push_space = BTRFS_LEAF_DATA_SIZE(root); in __push_leaf_right()
3702 clean_tree_block(trans, root->fs_info, left); in __push_leaf_right()
3714 clean_tree_block(trans, root->fs_info, path->nodes[0]); in __push_leaf_right()
3742 *root, struct btrfs_path *path, in push_leaf_right()
3764 right = read_node_slot(root, upper, slot + 1); in push_leaf_right()
3771 free_space = btrfs_leaf_free_space(root, right); in push_leaf_right()
3776 ret = btrfs_cow_block(trans, root, right, upper, in push_leaf_right()
3781 free_space = btrfs_leaf_free_space(root, right); in push_leaf_right()
3802 return __push_leaf_right(trans, root, path, min_data_size, empty, in push_leaf_right()
3819 struct btrfs_root *root, in __push_leaf_left() argument
3852 int space = btrfs_leaf_free_space(root, right); in __push_leaf_left()
3881 push_space = BTRFS_LEAF_DATA_SIZE(root) - in __push_leaf_left()
3885 leaf_data_end(root, left) - push_space, in __push_leaf_left()
3900 ioff - (BTRFS_LEAF_DATA_SIZE(root) - old_left_item_size), in __push_leaf_left()
3912 leaf_data_end(root, right); in __push_leaf_left()
3914 BTRFS_LEAF_DATA_SIZE(root) - push_space, in __push_leaf_left()
3916 leaf_data_end(root, right), push_space); in __push_leaf_left()
3925 push_space = BTRFS_LEAF_DATA_SIZE(root); in __push_leaf_left()
3938 clean_tree_block(trans, root->fs_info, right); in __push_leaf_left()
3941 fixup_low_keys(root->fs_info, path, &disk_key, 1); in __push_leaf_left()
3972 *root, struct btrfs_path *path, int min_data_size, in push_leaf_left()
3994 left = read_node_slot(root, path->nodes[1], slot - 1); in push_leaf_left()
4001 free_space = btrfs_leaf_free_space(root, left); in push_leaf_left()
4008 ret = btrfs_cow_block(trans, root, left, in push_leaf_left()
4017 free_space = btrfs_leaf_free_space(root, left); in push_leaf_left()
4023 return __push_leaf_left(trans, root, path, min_data_size, in push_leaf_left()
4037 struct btrfs_root *root, in copy_for_split() argument
4053 data_copy_size = btrfs_item_end_nr(l, mid) - leaf_data_end(root, l); in copy_for_split()
4060 btrfs_leaf_data(right) + BTRFS_LEAF_DATA_SIZE(root) - in copy_for_split()
4062 leaf_data_end(root, l), data_copy_size); in copy_for_split()
4064 rt_data_off = BTRFS_LEAF_DATA_SIZE(root) - in copy_for_split()
4078 insert_ptr(trans, root, path, &disk_key, right->start, in copy_for_split()
4110 struct btrfs_root *root, in push_for_double_split() argument
4122 space_needed -= btrfs_leaf_free_space(root, path->nodes[0]); in push_for_double_split()
4128 ret = push_leaf_right(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4143 if (btrfs_leaf_free_space(root, path->nodes[0]) >= data_size) in push_for_double_split()
4148 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4167 struct btrfs_root *root, in split_leaf() argument
4178 struct btrfs_fs_info *fs_info = root->fs_info; in split_leaf()
4188 sizeof(struct btrfs_item) > BTRFS_LEAF_DATA_SIZE(root)) in split_leaf()
4196 space_needed -= btrfs_leaf_free_space(root, l); in split_leaf()
4198 wret = push_leaf_right(trans, root, path, space_needed, in split_leaf()
4203 wret = push_leaf_left(trans, root, path, space_needed, in split_leaf()
4211 if (btrfs_leaf_free_space(root, l) >= data_size) in split_leaf()
4216 ret = insert_new_root(trans, root, path, 1); in split_leaf()
4230 BTRFS_LEAF_DATA_SIZE(root)) { in split_leaf()
4237 data_size > BTRFS_LEAF_DATA_SIZE(root)) { in split_leaf()
4246 BTRFS_LEAF_DATA_SIZE(root)) { in split_leaf()
4255 data_size > BTRFS_LEAF_DATA_SIZE(root)) { in split_leaf()
4269 right = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, in split_leaf()
4274 root_add_used(root, root->nodesize); in split_leaf()
4280 btrfs_set_header_owner(right, root->root_key.objectid); in split_leaf()
4292 insert_ptr(trans, root, path, &disk_key, right->start, in split_leaf()
4301 insert_ptr(trans, root, path, &disk_key, right->start, in split_leaf()
4314 copy_for_split(trans, root, path, l, right, slot, mid, nritems); in split_leaf()
4325 push_for_double_split(trans, root, path, data_size); in split_leaf()
4327 if (btrfs_leaf_free_space(root, path->nodes[0]) >= data_size) in split_leaf()
4333 struct btrfs_root *root, in setup_leaf_for_split() argument
4349 if (btrfs_leaf_free_space(root, leaf) >= ins_len) in setup_leaf_for_split()
4362 ret = btrfs_search_slot(trans, root, &key, path, 0, 1); in setup_leaf_for_split()
4376 if (btrfs_leaf_free_space(root, path->nodes[0]) >= ins_len) in setup_leaf_for_split()
4387 ret = split_leaf(trans, root, &key, path, ins_len, 1); in setup_leaf_for_split()
4400 struct btrfs_root *root, in split_item() argument
4416 BUG_ON(btrfs_leaf_free_space(root, leaf) < sizeof(struct btrfs_item)); in split_item()
4465 BUG_ON(btrfs_leaf_free_space(root, leaf) < 0); in split_item()
4486 struct btrfs_root *root, in btrfs_split_item() argument
4492 ret = setup_leaf_for_split(trans, root, path, in btrfs_split_item()
4497 ret = split_item(trans, root, path, new_key, split_offset); in btrfs_split_item()
4510 struct btrfs_root *root, in btrfs_duplicate_item() argument
4520 ret = setup_leaf_for_split(trans, root, path, in btrfs_duplicate_item()
4526 setup_items_for_insert(root, path, new_key, &item_size, in btrfs_duplicate_item()
4543 void btrfs_truncate_item(struct btrfs_root *root, struct btrfs_path *path, in btrfs_truncate_item() argument
4567 data_end = leaf_data_end(root, leaf); in btrfs_truncate_item()
4626 fixup_low_keys(root->fs_info, path, &disk_key, 1); in btrfs_truncate_item()
4633 if (btrfs_leaf_free_space(root, leaf) < 0) { in btrfs_truncate_item()
4634 btrfs_print_leaf(root, leaf); in btrfs_truncate_item()
4642 void btrfs_extend_item(struct btrfs_root *root, struct btrfs_path *path, in btrfs_extend_item() argument
4660 data_end = leaf_data_end(root, leaf); in btrfs_extend_item()
4662 if (btrfs_leaf_free_space(root, leaf) < data_size) { in btrfs_extend_item()
4663 btrfs_print_leaf(root, leaf); in btrfs_extend_item()
4671 btrfs_print_leaf(root, leaf); in btrfs_extend_item()
4672 btrfs_crit(root->fs_info, "slot %d too large, nritems %d", in btrfs_extend_item()
4701 if (btrfs_leaf_free_space(root, leaf) < 0) { in btrfs_extend_item()
4702 btrfs_print_leaf(root, leaf); in btrfs_extend_item()
4712 void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path, in setup_items_for_insert() argument
4727 fixup_low_keys(root->fs_info, path, &disk_key, 1); in setup_items_for_insert()
4737 data_end = leaf_data_end(root, leaf); in setup_items_for_insert()
4739 if (btrfs_leaf_free_space(root, leaf) < total_size) { in setup_items_for_insert()
4740 btrfs_print_leaf(root, leaf); in setup_items_for_insert()
4741 btrfs_crit(root->fs_info, "not enough freespace need %u have %d", in setup_items_for_insert()
4742 total_size, btrfs_leaf_free_space(root, leaf)); in setup_items_for_insert()
4750 btrfs_print_leaf(root, leaf); in setup_items_for_insert()
4751 btrfs_crit(root->fs_info, "slot %d old_data %d data_end %d", in setup_items_for_insert()
4793 if (btrfs_leaf_free_space(root, leaf) < 0) { in setup_items_for_insert()
4794 btrfs_print_leaf(root, leaf); in setup_items_for_insert()
4804 struct btrfs_root *root, in btrfs_insert_empty_items() argument
4819 ret = btrfs_search_slot(trans, root, cpu_key, path, total_size, 1); in btrfs_insert_empty_items()
4828 setup_items_for_insert(root, path, cpu_key, data_size, in btrfs_insert_empty_items()
4838 *root, struct btrfs_key *cpu_key, void *data, u32 in btrfs_insert_item()
4849 ret = btrfs_insert_empty_item(trans, root, path, cpu_key, data_size); in btrfs_insert_item()
4866 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path, in del_ptr() argument
4876 tree_mod_log_eb_move(root->fs_info, parent, slot, in del_ptr()
4884 ret = tree_mod_log_insert_key(root->fs_info, parent, slot, in del_ptr()
4891 if (nritems == 0 && parent == root->node) { in del_ptr()
4892 BUG_ON(btrfs_header_level(root->node) != 1); in del_ptr()
4894 btrfs_set_header_level(root->node, 0); in del_ptr()
4899 fixup_low_keys(root->fs_info, path, &disk_key, level + 1); in del_ptr()
4915 struct btrfs_root *root, in btrfs_del_leaf() argument
4920 del_ptr(root, path, 1, path->slots[1]); in btrfs_del_leaf()
4928 root_sub_used(root, leaf->len); in btrfs_del_leaf()
4931 btrfs_free_tree_block(trans, root, leaf, 0, 1); in btrfs_del_leaf()
4938 int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_del_items() argument
4962 int data_end = leaf_data_end(root, leaf); in btrfs_del_items()
4988 if (leaf == root->node) { in btrfs_del_items()
4992 clean_tree_block(trans, root->fs_info, leaf); in btrfs_del_items()
4993 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
5001 fixup_low_keys(root->fs_info, path, &disk_key, 1); in btrfs_del_items()
5005 if (used < BTRFS_LEAF_DATA_SIZE(root) / 3) { in btrfs_del_items()
5014 wret = push_leaf_left(trans, root, path, 1, 1, in btrfs_del_items()
5021 wret = push_leaf_right(trans, root, path, 1, in btrfs_del_items()
5029 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
5057 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_prev_leaf() argument
5079 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_prev_leaf()
5121 int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key, in btrfs_search_forward() argument
5136 cur = btrfs_read_lock_root_node(root); in btrfs_search_forward()
5184 sret = btrfs_find_next_key(root, path, min_key, level, in btrfs_search_forward()
5201 cur = read_node_slot(root, cur, slot); in btrfs_search_forward()
5221 static void tree_move_down(struct btrfs_root *root, in tree_move_down() argument
5226 path->nodes[*level - 1] = read_node_slot(root, path->nodes[*level], in tree_move_down()
5232 static int tree_move_next_or_upnext(struct btrfs_root *root, in tree_move_next_or_upnext() argument
5263 static int tree_advance(struct btrfs_root *root, in tree_advance() argument
5272 ret = tree_move_next_or_upnext(root, path, level, root_level); in tree_advance()
5274 tree_move_down(root, path, level, root_level); in tree_advance()
5584 int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, in btrfs_find_next_key() argument
5620 ret = btrfs_search_slot(NULL, root, &cur_key, path, in btrfs_find_next_key()
5654 int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_next_leaf() argument
5656 return btrfs_next_old_leaf(root, path, 0); in btrfs_next_leaf()
5659 int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, in btrfs_next_old_leaf() argument
5687 ret = btrfs_search_old_slot(root, &key, path, time_seq); in btrfs_next_old_leaf()
5689 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_next_old_leaf()
5751 ret = read_block_for_search(NULL, root, path, &next, level, in btrfs_next_old_leaf()
5801 ret = read_block_for_search(NULL, root, path, &next, level, in btrfs_next_old_leaf()
5838 int btrfs_previous_item(struct btrfs_root *root, in btrfs_previous_item() argument
5850 ret = btrfs_prev_leaf(root, path); in btrfs_previous_item()
5881 int btrfs_previous_extent_item(struct btrfs_root *root, in btrfs_previous_extent_item() argument
5892 ret = btrfs_prev_leaf(root, path); in btrfs_previous_extent_item()