Lines Matching refs:trans
28 static int split_node(struct btrfs_trans_handle *trans, struct btrfs_root
30 static int split_leaf(struct btrfs_trans_handle *trans, struct btrfs_root
33 static int push_node_left(struct btrfs_trans_handle *trans,
36 static int balance_node_right(struct btrfs_trans_handle *trans,
238 int btrfs_copy_root(struct btrfs_trans_handle *trans, in btrfs_copy_root() argument
249 trans->transid != root->fs_info->running_transaction->transid); 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()
266 btrfs_set_header_generation(cow, trans->transid); in btrfs_copy_root()
278 WARN_ON(btrfs_header_generation(buf) > trans->transid); 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()
977 static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans, in update_ref_for_cow() argument
1007 ret = btrfs_lookup_extent_info(trans, root, buf->start, in update_ref_for_cow()
1034 ret = btrfs_inc_ref(trans, root, buf, 1); 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()
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()
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()
1093 static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans, in __btrfs_cow_block() argument
1113 trans->transid != root->fs_info->running_transaction->transid); in __btrfs_cow_block()
1115 trans->transid != root->last_trans); in __btrfs_cow_block()
1132 cow = btrfs_alloc_tree_block(trans, root, parent_start, in __btrfs_cow_block()
1142 btrfs_set_header_generation(cow, trans->transid); 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()
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()
1180 btrfs_free_tree_block(trans, root, buf, parent_start, in __btrfs_cow_block()
1190 WARN_ON(trans->transid != btrfs_header_generation(parent)); in __btrfs_cow_block()
1196 trans->transid); 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()
1501 static inline int should_cow_block(struct btrfs_trans_handle *trans, in should_cow_block() argument
1522 if (btrfs_header_generation(buf) == trans->transid && in should_cow_block()
1536 noinline int btrfs_cow_block(struct btrfs_trans_handle *trans, in btrfs_cow_block() argument
1544 if (trans->transaction != root->fs_info->running_transaction) in btrfs_cow_block()
1546 trans->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()
1622 int btrfs_realloc_node(struct btrfs_trans_handle *trans, 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()
1710 err = __btrfs_cow_block(trans, root, cur, parent, i, in btrfs_realloc_node()
1886 static noinline int balance_level(struct btrfs_trans_handle *trans, in balance_level() argument
1907 WARN_ON(btrfs_header_generation(mid) != trans->transid); in balance_level()
1936 ret = btrfs_cow_block(trans, root, child, mid, 0, &child); in balance_level()
1951 clean_tree_block(trans, root->fs_info, mid); in balance_level()
1957 btrfs_free_tree_block(trans, root, mid, 0, 1); in balance_level()
1970 wret = btrfs_cow_block(trans, root, left, 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()
2009 btrfs_free_tree_block(trans, root, right, 0, 1); 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()
2053 btrfs_free_tree_block(trans, root, mid, 0, 1); in balance_level()
2104 static noinline int push_nodes_for_insert(struct btrfs_trans_handle *trans, in push_nodes_for_insert() argument
2121 WARN_ON(btrfs_header_generation(mid) != trans->transid); 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()
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()
2444 read_block_for_search(struct btrfs_trans_handle *trans, in read_block_for_search() argument
2527 setup_nodes_for_search(struct btrfs_trans_handle *trans, in setup_nodes_for_search() argument
2545 sret = split_node(trans, root, p, level); in setup_nodes_for_search()
2566 sret = balance_level(trans, root, p, level); in setup_nodes_for_search()
2670 int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root in btrfs_search_slot() argument
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()
2910 err = split_leaf(trans, root, key, in btrfs_search_slot()
3193 static int push_node_left(struct btrfs_trans_handle *trans, in push_node_left() argument
3205 WARN_ON(btrfs_header_generation(src) != trans->transid); in push_node_left()
3206 WARN_ON(btrfs_header_generation(dst) != trans->transid); in push_node_left()
3232 btrfs_abort_transaction(trans, root, ret); in push_node_left()
3267 static int balance_node_right(struct btrfs_trans_handle *trans, in balance_node_right() argument
3278 WARN_ON(btrfs_header_generation(src) != trans->transid); in balance_node_right()
3279 WARN_ON(btrfs_header_generation(dst) != trans->transid); in balance_node_right()
3307 btrfs_abort_transaction(trans, root, ret); in balance_node_right()
3331 static noinline int insert_new_root(struct btrfs_trans_handle *trans, in insert_new_root() argument
3350 c = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, in insert_new_root()
3361 btrfs_set_header_generation(c, trans->transid); in insert_new_root()
3374 WARN_ON(lower_gen != trans->transid); in insert_new_root()
3402 static void insert_ptr(struct btrfs_trans_handle *trans, in insert_ptr() argument
3433 WARN_ON(trans->transid == 0); in insert_ptr()
3434 btrfs_set_node_ptr_generation(lower, slot, trans->transid); in insert_ptr()
3448 static noinline int split_node(struct btrfs_trans_handle *trans, in split_node() argument
3460 WARN_ON(btrfs_header_generation(c) != trans->transid); 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()
3499 btrfs_set_header_generation(split, trans->transid); 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()
3592 static noinline int __push_leaf_right(struct btrfs_trans_handle *trans, in __push_leaf_right() argument
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()
3741 static int push_leaf_right(struct btrfs_trans_handle *trans, struct btrfs_root in push_leaf_right() argument
3776 ret = btrfs_cow_block(trans, root, right, upper, in push_leaf_right()
3802 return __push_leaf_right(trans, root, path, min_data_size, empty, in push_leaf_right()
3818 static noinline int __push_leaf_left(struct btrfs_trans_handle *trans, in __push_leaf_left() argument
3938 clean_tree_block(trans, root->fs_info, right); in __push_leaf_left()
3971 static int push_leaf_left(struct btrfs_trans_handle *trans, struct btrfs_root in push_leaf_left() argument
4008 ret = btrfs_cow_block(trans, root, left, in push_leaf_left()
4023 return __push_leaf_left(trans, root, path, min_data_size, in push_leaf_left()
4036 static noinline void copy_for_split(struct btrfs_trans_handle *trans, in copy_for_split() argument
4078 insert_ptr(trans, root, path, &disk_key, right->start, in copy_for_split()
4109 static noinline int push_for_double_split(struct btrfs_trans_handle *trans, in push_for_double_split() argument
4128 ret = push_leaf_right(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4148 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4166 static noinline int split_leaf(struct btrfs_trans_handle *trans, in split_leaf() argument
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()
4216 ret = insert_new_root(trans, root, path, 1); in split_leaf()
4269 right = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, in split_leaf()
4278 btrfs_set_header_generation(right, trans->transid); 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()
4332 static noinline int setup_leaf_for_split(struct btrfs_trans_handle *trans, in setup_leaf_for_split() argument
4362 ret = btrfs_search_slot(trans, root, &key, path, 0, 1); in setup_leaf_for_split()
4387 ret = split_leaf(trans, root, &key, path, ins_len, 1); in setup_leaf_for_split()
4399 static noinline int split_item(struct btrfs_trans_handle *trans, in split_item() argument
4485 int btrfs_split_item(struct btrfs_trans_handle *trans, 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()
4509 int btrfs_duplicate_item(struct btrfs_trans_handle *trans, in btrfs_duplicate_item() argument
4520 ret = setup_leaf_for_split(trans, root, path, in btrfs_duplicate_item()
4803 int btrfs_insert_empty_items(struct btrfs_trans_handle *trans, in btrfs_insert_empty_items() argument
4819 ret = btrfs_search_slot(trans, root, cpu_key, path, total_size, 1); in btrfs_insert_empty_items()
4837 int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root in btrfs_insert_item() argument
4849 ret = btrfs_insert_empty_item(trans, root, path, cpu_key, data_size); in btrfs_insert_item()
4914 static noinline void btrfs_del_leaf(struct btrfs_trans_handle *trans, in btrfs_del_leaf() argument
4919 WARN_ON(btrfs_header_generation(leaf) != trans->transid); 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
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()
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()