Lines Matching defs:trans
49 static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
57 static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
61 static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
101 int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
130 if (!trans) {
173 if (trans)
174 btrfs_abort_transaction(trans, ret);
188 if (!trans)
191 delayed_refs = &trans->transaction->delayed_refs;
430 static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans,
436 struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
456 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
506 static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans,
512 struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
531 ret = btrfs_insert_empty_item(trans, root, path, &key, size);
557 ret = btrfs_insert_empty_item(trans, root, path, &key,
578 btrfs_mark_buffer_dirty(trans, leaf);
585 static noinline int remove_extent_data_ref(struct btrfs_trans_handle *trans,
609 btrfs_err(trans->fs_info,
612 btrfs_abort_transaction(trans, -EUCLEAN);
620 ret = btrfs_del_item(trans, root, path);
626 btrfs_mark_buffer_dirty(trans, leaf);
672 static noinline int lookup_tree_block_ref(struct btrfs_trans_handle *trans,
677 struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
690 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
696 static noinline int insert_tree_block_ref(struct btrfs_trans_handle *trans,
701 struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
714 ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
771 int lookup_inline_extent_backref(struct btrfs_trans_handle *trans,
778 struct btrfs_fs_info *fs_info = trans->fs_info;
818 ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1);
868 btrfs_abort_transaction(trans, err);
979 void setup_inline_extent_backref(struct btrfs_trans_handle *trans,
1002 btrfs_extend_item(trans, path, size);
1036 btrfs_mark_buffer_dirty(trans, leaf);
1039 static int lookup_extent_backref(struct btrfs_trans_handle *trans,
1047 ret = lookup_inline_extent_backref(trans, path, ref_ret, bytenr,
1057 ret = lookup_tree_block_ref(trans, path, bytenr, parent,
1060 ret = lookup_extent_data_ref(trans, path, bytenr, parent,
1070 struct btrfs_trans_handle *trans,
1179 btrfs_truncate_item(trans, path, item_size, 1);
1181 btrfs_mark_buffer_dirty(trans, leaf);
1186 int insert_inline_extent_backref(struct btrfs_trans_handle *trans,
1196 ret = lookup_inline_extent_backref(trans, path, &iref, bytenr,
1206 btrfs_crit(trans->fs_info,
1211 ret = update_inline_extent_backref(trans, path, iref,
1214 setup_inline_extent_backref(trans, path, iref, parent,
1222 static int remove_extent_backref(struct btrfs_trans_handle *trans,
1232 ret = update_inline_extent_backref(trans, path, iref,
1235 ret = remove_extent_data_ref(trans, root, path, refs_to_drop);
1237 ret = btrfs_del_item(trans, root, path);
1421 int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
1424 struct btrfs_fs_info *fs_info = trans->fs_info;
1433 ret = btrfs_add_delayed_tree_ref(trans, generic_ref, NULL);
1435 ret = btrfs_add_delayed_data_ref(trans, generic_ref, 0);
1448 * @trans: Handle of transaction
1479 static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
1499 ret = insert_inline_extent_backref(trans, path, bytenr, num_bytes,
1518 btrfs_mark_buffer_dirty(trans, leaf);
1523 ret = insert_tree_block_ref(trans, path, bytenr, parent,
1526 ret = insert_extent_data_ref(trans, path, bytenr, parent,
1531 btrfs_abort_transaction(trans, ret);
1537 static int run_delayed_data_ref(struct btrfs_trans_handle *trans,
1554 trace_run_delayed_data_ref(trans->fs_info, node, ref, node->action);
1563 ret = alloc_reserved_file_extent(trans, parent, ref_root,
1568 ret = __btrfs_inc_extent_ref(trans, node, parent, ref_root,
1572 ret = __btrfs_free_extent(trans, node, parent,
1600 static int run_delayed_extent_op(struct btrfs_trans_handle *trans,
1604 struct btrfs_fs_info *fs_info = trans->fs_info;
1615 if (TRANS_ABORTED(trans))
1637 ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
1679 btrfs_abort_transaction(trans, err);
1686 btrfs_mark_buffer_dirty(trans, leaf);
1692 static int run_delayed_tree_ref(struct btrfs_trans_handle *trans,
1703 trace_run_delayed_tree_ref(trans->fs_info, node, ref, node->action);
1710 btrfs_err(trans->fs_info,
1718 ret = alloc_reserved_tree_block(trans, node, extent_op);
1720 ret = __btrfs_inc_extent_ref(trans, node, parent, ref_root,
1723 ret = __btrfs_free_extent(trans, node, parent, ref_root,
1732 static int run_one_delayed_ref(struct btrfs_trans_handle *trans,
1739 if (TRANS_ABORTED(trans)) {
1741 btrfs_pin_extent(trans, node->bytenr, node->num_bytes, 1);
1747 ret = run_delayed_tree_ref(trans, node, extent_op,
1751 ret = run_delayed_data_ref(trans, node, extent_op,
1756 btrfs_pin_extent(trans, node->bytenr, node->num_bytes, 1);
1758 btrfs_err(trans->fs_info,
1815 static int run_and_cleanup_extent_op(struct btrfs_trans_handle *trans,
1826 ret = run_delayed_extent_op(trans, head, extent_op);
1851 static int cleanup_ref_head(struct btrfs_trans_handle *trans,
1855 struct btrfs_fs_info *fs_info = trans->fs_info;
1859 delayed_refs = &trans->transaction->delayed_refs;
1861 ret = run_and_cleanup_extent_op(trans, head);
1887 btrfs_pin_extent(trans, head->bytenr, head->num_bytes, 1);
1892 ret = btrfs_del_csums(trans, csum_root, head->bytenr,
1906 struct btrfs_trans_handle *trans)
1909 &trans->transaction->delayed_refs;
1938 static int btrfs_run_delayed_refs_for_head(struct btrfs_trans_handle *trans,
1941 struct btrfs_fs_info *fs_info = trans->fs_info;
1948 delayed_refs = &trans->transaction->delayed_refs;
1993 ret = run_one_delayed_ref(trans, ref, extent_op,
2017 static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
2020 struct btrfs_fs_info *fs_info = trans->fs_info;
2026 delayed_refs = &trans->transaction->delayed_refs;
2029 locked_ref = btrfs_obtain_ref_head(trans);
2054 ret = btrfs_run_delayed_refs_for_head(trans, locked_ref);
2066 ret = cleanup_ref_head(trans, locked_ref);
2141 int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
2144 struct btrfs_fs_info *fs_info = trans->fs_info;
2152 if (TRANS_ABORTED(trans))
2158 delayed_refs = &trans->transaction->delayed_refs;
2166 ret = __btrfs_run_delayed_refs(trans, count);
2168 btrfs_abort_transaction(trans, ret);
2173 btrfs_create_pending_block_groups(trans);
2198 int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans,
2214 ret = btrfs_add_delayed_extent_op(trans, eb->start, eb->len, extent_op);
2402 static int __btrfs_mod_ref(struct btrfs_trans_handle *trans,
2463 ret = btrfs_inc_extent_ref(trans, &generic_ref);
2465 ret = btrfs_free_extent(trans, &generic_ref);
2476 ret = btrfs_inc_extent_ref(trans, &generic_ref);
2478 ret = btrfs_free_extent(trans, &generic_ref);
2488 int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2491 return __btrfs_mod_ref(trans, root, buf, full_backref, 1);
2494 int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2497 return __btrfs_mod_ref(trans, root, buf, full_backref, 0);
2536 static int pin_down_extent(struct btrfs_trans_handle *trans,
2554 set_extent_bit(&trans->transaction->pinned_extents, bytenr,
2559 int btrfs_pin_extent(struct btrfs_trans_handle *trans,
2564 cache = btrfs_lookup_block_group(trans->fs_info, bytenr);
2567 pin_down_extent(trans, cache, bytenr, num_bytes, reserved);
2576 int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle *trans,
2582 cache = btrfs_lookup_block_group(trans->fs_info, bytenr);
2594 pin_down_extent(trans, cache, bytenr, num_bytes, 0);
2783 int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans)
2785 struct btrfs_fs_info *fs_info = trans->fs_info;
2793 unpin = &trans->transaction->pinned_extents;
2795 while (!TRANS_ABORTED(trans)) {
2826 deleted_bgs = &trans->transaction->deleted_bgs;
2831 if (!TRANS_ABORTED(trans))
2852 static int do_free_extent_accounting(struct btrfs_trans_handle *trans,
2860 csum_root = btrfs_csum_root(trans->fs_info, bytenr);
2861 ret = btrfs_del_csums(trans, csum_root, bytenr, num_bytes);
2863 btrfs_abort_transaction(trans, ret);
2868 ret = add_to_free_space_tree(trans, bytenr, num_bytes);
2870 btrfs_abort_transaction(trans, ret);
2874 ret = btrfs_update_block_group(trans, bytenr, num_bytes, false);
2876 btrfs_abort_transaction(trans, ret);
2881 #define abort_and_dump(trans, path, fmt, args...) \
2883 btrfs_abort_transaction(trans, -EUCLEAN); \
2885 btrfs_crit(trans->fs_info, fmt, ##args); \
2947 static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
2953 struct btrfs_fs_info *info = trans->fs_info;
2985 btrfs_abort_transaction(trans, ret);
2992 ret = lookup_extent_backref(trans, path, &iref, bytenr, num_bytes,
3028 abort_and_dump(trans, path,
3035 ret = remove_extent_backref(trans, extent_root, path,
3038 btrfs_abort_transaction(trans, ret);
3053 ret = btrfs_search_slot(trans, extent_root,
3075 ret = btrfs_search_slot(trans, extent_root,
3087 btrfs_abort_transaction(trans, ret);
3093 abort_and_dump(trans, path,
3099 btrfs_abort_transaction(trans, ret);
3107 btrfs_err(trans->fs_info,
3110 btrfs_abort_transaction(trans, ret);
3120 abort_and_dump(trans, path,
3134 abort_and_dump(trans, path,
3151 abort_and_dump(trans, path,
3159 btrfs_mark_buffer_dirty(trans, leaf);
3162 ret = remove_extent_backref(trans, extent_root, path,
3165 btrfs_abort_transaction(trans, ret);
3174 abort_and_dump(trans, path,
3183 abort_and_dump(trans, path,
3198 abort_and_dump(trans, path,
3209 ret = btrfs_del_items(trans, extent_root, path, path->slots[0],
3212 btrfs_abort_transaction(trans, ret);
3217 ret = do_free_extent_accounting(trans, bytenr, num_bytes, is_data);
3232 static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans,
3239 delayed_refs = &trans->transaction->delayed_refs;
3269 btrfs_cleanup_ref_head_accounting(trans->fs_info, delayed_refs, head);
3281 void btrfs_free_tree_block(struct btrfs_trans_handle *trans,
3286 struct btrfs_fs_info *fs_info = trans->fs_info;
3297 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, NULL);
3301 if (last_ref && btrfs_header_generation(buf) == trans->transid) {
3306 ret = check_ref_cleanup(trans, buf->start);
3308 btrfs_redirty_list_add(trans->transaction, buf);
3316 pin_down_extent(trans, cache, buf->start, buf->len, 1);
3341 btrfs_redirty_list_add(trans->transaction, buf);
3342 pin_down_extent(trans, cache, buf->start, buf->len, 1);
3365 int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_ref *ref)
3367 struct btrfs_fs_info *fs_info = trans->fs_info;
3382 btrfs_pin_extent(trans, ref->bytenr, ref->len, 1);
3385 ret = btrfs_add_delayed_tree_ref(trans, ref, NULL);
3387 ret = btrfs_add_delayed_data_ref(trans, ref, 0);
4020 struct btrfs_trans_handle *trans;
4028 trans = current->journal_info;
4029 if (trans)
4032 trans = btrfs_join_transaction(root);
4034 if (IS_ERR(trans)) {
4035 ret = PTR_ERR(trans);
4039 ret = btrfs_chunk_alloc(trans, ffe_ctl->flags,
4048 btrfs_abort_transaction(trans, ret);
4052 btrfs_end_transaction(trans);
4594 int btrfs_pin_reserved_extent(struct btrfs_trans_handle *trans, u64 start,
4600 cache = btrfs_lookup_block_group(trans->fs_info, start);
4602 btrfs_err(trans->fs_info, "unable to find block group for %llu",
4607 ret = pin_down_extent(trans, cache, start, len, 1);
4612 static int alloc_reserved_extent(struct btrfs_trans_handle *trans, u64 bytenr,
4615 struct btrfs_fs_info *fs_info = trans->fs_info;
4618 ret = remove_from_free_space_tree(trans, bytenr, num_bytes);
4622 ret = btrfs_update_block_group(trans, bytenr, num_bytes, true);
4634 static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
4639 struct btrfs_fs_info *fs_info = trans->fs_info;
4661 ret = btrfs_insert_empty_item(trans, extent_root, path, ins, size);
4671 btrfs_set_extent_generation(leaf, extent_item, trans->transid);
4691 btrfs_mark_buffer_dirty(trans, path->nodes[0]);
4694 return alloc_reserved_extent(trans, ins->objectid, ins->offset);
4697 static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
4701 struct btrfs_fs_info *fs_info = trans->fs_info;
4732 ret = btrfs_insert_empty_item(trans, extent_root, path, &extent_key,
4743 btrfs_set_extent_generation(leaf, extent_item, trans->transid);
4766 btrfs_mark_buffer_dirty(trans, leaf);
4769 return alloc_reserved_extent(trans, node->bytenr, fs_info->nodesize);
4772 int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
4787 return btrfs_add_delayed_data_ref(trans, &generic_ref, ram_bytes);
4795 int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans,
4799 struct btrfs_fs_info *fs_info = trans->fs_info;
4827 ret = alloc_reserved_file_extent(trans, 0, root_objectid, 0, owner,
4830 btrfs_pin_extent(trans, ins->objectid, ins->offset, 1);
4836 btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root,
4876 btrfs_set_header_generation(buf, trans->transid);
4886 btrfs_clear_buffer_dirty(trans, buf);
4895 btrfs_set_header_generation(buf, trans->transid);
4916 set_extent_bit(&trans->transaction->dirty_pages, buf->start,
4927 struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans,
4948 buf = btrfs_init_new_buffer(trans, root, root->alloc_bytenr,
4956 block_rsv = btrfs_use_block_rsv(trans, root, blocksize);
4965 buf = btrfs_init_new_buffer(trans, root, ins.objectid, level,
4999 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, extent_op);
5036 static noinline void reada_walk_down(struct btrfs_trans_handle *trans,
5081 ret = btrfs_lookup_extent_info(trans, fs_info, bytenr,
5124 static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
5147 ret = btrfs_lookup_extent_info(trans, fs_info,
5171 ret = btrfs_inc_ref(trans, root, eb, 1);
5173 ret = btrfs_dec_ref(trans, root, eb, 0);
5175 ret = btrfs_set_disk_extent_flags(trans, eb, flag);
5195 static int check_ref_exists(struct btrfs_trans_handle *trans,
5207 ret = lookup_extent_backref(trans, path, &iref, bytenr,
5231 static noinline int do_walk_down(struct btrfs_trans_handle *trans,
5281 ret = btrfs_lookup_extent_info(trans, fs_info, bytenr, level - 1, 1,
5329 reada_walk_down(trans, root, wc, path);
5380 ret = check_ref_exists(trans, root, bytenr, parent,
5397 ret = btrfs_qgroup_trace_subtree(trans, next,
5419 ret = btrfs_free_extent(trans, &ref);
5446 static noinline int walk_up_proc(struct btrfs_trans_handle *trans,
5480 ret = btrfs_lookup_extent_info(trans, fs_info,
5504 ret = btrfs_dec_ref(trans, root, eb, 1);
5506 ret = btrfs_dec_ref(trans, root, eb, 0);
5509 ret = btrfs_qgroup_trace_leaf_items(trans, eb);
5522 btrfs_clear_buffer_dirty(trans, eb);
5538 btrfs_free_tree_block(trans, btrfs_root_id(root), eb, parent,
5551 static noinline int walk_down_tree(struct btrfs_trans_handle *trans,
5561 ret = walk_down_proc(trans, root, path, wc, lookup_info);
5572 ret = do_walk_down(trans, root, path, wc, &lookup_info);
5583 static noinline int walk_up_tree(struct btrfs_trans_handle *trans,
5599 ret = walk_up_proc(trans, root, path, wc);
5637 struct btrfs_trans_handle *trans;
5668 trans = btrfs_join_transaction(tree_root);
5670 trans = btrfs_start_transaction(tree_root, 0);
5671 if (IS_ERR(trans)) {
5672 err = PTR_ERR(trans);
5676 err = btrfs_run_delayed_items(trans);
5725 ret = btrfs_lookup_extent_info(trans, fs_info,
5755 ret = walk_down_tree(trans, root, path, wc);
5757 btrfs_abort_transaction(trans, ret);
5762 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL);
5764 btrfs_abort_transaction(trans, ret);
5785 if (btrfs_should_end_transaction(trans) ||
5787 ret = btrfs_update_root(trans, tree_root,
5791 btrfs_abort_transaction(trans, ret);
5797 btrfs_set_last_root_drop_gen(fs_info, trans->transid);
5799 btrfs_end_transaction_throttle(trans);
5813 trans = btrfs_join_transaction(tree_root);
5815 trans = btrfs_start_transaction(tree_root, 0);
5816 if (IS_ERR(trans)) {
5817 err = PTR_ERR(trans);
5826 ret = btrfs_del_root(trans, &root->root_key);
5828 btrfs_abort_transaction(trans, ret);
5837 btrfs_abort_transaction(trans, ret);
5846 btrfs_del_orphan_item(trans, tree_root,
5860 btrfs_add_dropped_root(trans, root);
5866 btrfs_set_last_root_drop_gen(fs_info, trans->transid);
5868 btrfs_end_transaction_throttle(trans);
5898 int btrfs_drop_subtree(struct btrfs_trans_handle *trans,
5945 wret = walk_down_tree(trans, root, path, wc);
5951 wret = walk_up_tree(trans, root, path, wc, parent_level);