Lines Matching defs:trans
41 static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
49 static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
53 static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
113 int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
141 if (!trans) {
154 ret = btrfs_search_slot(trans, fs_info->extent_root, &key, path, 0, 0);
181 if (trans)
182 btrfs_abort_transaction(trans, ret);
196 if (!trans)
199 delayed_refs = &trans->transaction->delayed_refs;
438 static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans,
444 struct btrfs_root *root = trans->fs_info->extent_root;
464 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
514 static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans,
520 struct btrfs_root *root = trans->fs_info->extent_root;
539 ret = btrfs_insert_empty_item(trans, root, path, &key, size);
565 ret = btrfs_insert_empty_item(trans, root, path, &key,
593 static noinline int remove_extent_data_ref(struct btrfs_trans_handle *trans,
616 btrfs_print_v0_err(trans->fs_info);
617 btrfs_abort_transaction(trans, -EINVAL);
627 ret = btrfs_del_item(trans, trans->fs_info->extent_root, path);
681 static noinline int lookup_tree_block_ref(struct btrfs_trans_handle *trans,
686 struct btrfs_root *root = trans->fs_info->extent_root;
699 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
705 static noinline int insert_tree_block_ref(struct btrfs_trans_handle *trans,
722 ret = btrfs_insert_empty_item(trans, trans->fs_info->extent_root,
780 int lookup_inline_extent_backref(struct btrfs_trans_handle *trans,
787 struct btrfs_fs_info *fs_info = trans->fs_info;
826 ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1);
874 btrfs_abort_transaction(trans, err);
1038 static int lookup_extent_backref(struct btrfs_trans_handle *trans,
1046 ret = lookup_inline_extent_backref(trans, path, ref_ret, bytenr,
1056 ret = lookup_tree_block_ref(trans, path, bytenr, parent,
1059 ret = lookup_extent_data_ref(trans, path, bytenr, parent,
1136 int insert_inline_extent_backref(struct btrfs_trans_handle *trans,
1146 ret = lookup_inline_extent_backref(trans, path, &iref, bytenr,
1155 btrfs_crit(trans->fs_info,
1160 btrfs_crit(trans->fs_info,
1169 setup_inline_extent_backref(trans->fs_info, path, iref, parent,
1177 static int remove_extent_backref(struct btrfs_trans_handle *trans,
1189 ret = remove_extent_data_ref(trans, path, refs_to_drop,
1193 ret = btrfs_del_item(trans, trans->fs_info->extent_root, path);
1360 int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
1363 struct btrfs_fs_info *fs_info = trans->fs_info;
1372 ret = btrfs_add_delayed_tree_ref(trans, generic_ref, NULL);
1374 ret = btrfs_add_delayed_data_ref(trans, generic_ref, 0);
1387 * @trans: Handle of transaction
1418 static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
1439 ret = insert_inline_extent_backref(trans, path, bytenr, num_bytes,
1465 ret = insert_tree_block_ref(trans, path, bytenr, parent,
1468 ret = insert_extent_data_ref(trans, path, bytenr, parent,
1473 btrfs_abort_transaction(trans, ret);
1479 static int run_delayed_data_ref(struct btrfs_trans_handle *trans,
1496 trace_run_delayed_data_ref(trans->fs_info, node, ref, node->action);
1505 ret = alloc_reserved_file_extent(trans, parent, ref_root,
1510 ret = __btrfs_inc_extent_ref(trans, node, parent, ref_root,
1514 ret = __btrfs_free_extent(trans, node, parent,
1542 static int run_delayed_extent_op(struct btrfs_trans_handle *trans,
1546 struct btrfs_fs_info *fs_info = trans->fs_info;
1556 if (TRANS_ABORTED(trans))
1578 ret = btrfs_search_slot(trans, fs_info->extent_root, &key, path, 0, 1);
1615 btrfs_abort_transaction(trans, err);
1628 static int run_delayed_tree_ref(struct btrfs_trans_handle *trans,
1639 trace_run_delayed_tree_ref(trans->fs_info, node, ref, node->action);
1646 btrfs_err(trans->fs_info,
1654 ret = alloc_reserved_tree_block(trans, node, extent_op);
1656 ret = __btrfs_inc_extent_ref(trans, node, parent, ref_root,
1659 ret = __btrfs_free_extent(trans, node, parent, ref_root,
1668 static int run_one_delayed_ref(struct btrfs_trans_handle *trans,
1675 if (TRANS_ABORTED(trans)) {
1677 btrfs_pin_extent(trans, node->bytenr, node->num_bytes, 1);
1683 ret = run_delayed_tree_ref(trans, node, extent_op,
1687 ret = run_delayed_data_ref(trans, node, extent_op,
1692 btrfs_pin_extent(trans, node->bytenr, node->num_bytes, 1);
1694 btrfs_err(trans->fs_info,
1751 static int run_and_cleanup_extent_op(struct btrfs_trans_handle *trans,
1762 ret = run_delayed_extent_op(trans, head, extent_op);
1800 static int cleanup_ref_head(struct btrfs_trans_handle *trans,
1804 struct btrfs_fs_info *fs_info = trans->fs_info;
1808 delayed_refs = &trans->transaction->delayed_refs;
1810 ret = run_and_cleanup_extent_op(trans, head);
1836 btrfs_pin_extent(trans, head->bytenr, head->num_bytes, 1);
1838 ret = btrfs_del_csums(trans, fs_info->csum_root,
1852 struct btrfs_trans_handle *trans)
1855 &trans->transaction->delayed_refs;
1884 static int btrfs_run_delayed_refs_for_head(struct btrfs_trans_handle *trans,
1888 struct btrfs_fs_info *fs_info = trans->fs_info;
1895 delayed_refs = &trans->transaction->delayed_refs;
1942 ret = run_one_delayed_ref(trans, ref, extent_op,
1956 btrfs_merge_delayed_refs(trans, delayed_refs, locked_ref);
1966 static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
1969 struct btrfs_fs_info *fs_info = trans->fs_info;
1977 delayed_refs = &trans->transaction->delayed_refs;
1980 locked_ref = btrfs_obtain_ref_head(trans);
2003 btrfs_merge_delayed_refs(trans, delayed_refs, locked_ref);
2005 ret = btrfs_run_delayed_refs_for_head(trans, locked_ref,
2018 ret = cleanup_ref_head(trans, locked_ref);
2130 int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
2133 struct btrfs_fs_info *fs_info = trans->fs_info;
2141 if (TRANS_ABORTED(trans))
2147 delayed_refs = &trans->transaction->delayed_refs;
2155 ret = __btrfs_run_delayed_refs(trans, count);
2157 btrfs_abort_transaction(trans, ret);
2162 btrfs_create_pending_block_groups(trans);
2187 int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans,
2204 ret = btrfs_add_delayed_extent_op(trans, eb->start, eb->len, extent_op);
2391 static int __btrfs_mod_ref(struct btrfs_trans_handle *trans,
2453 ret = btrfs_inc_extent_ref(trans, &generic_ref);
2455 ret = btrfs_free_extent(trans, &generic_ref);
2467 ret = btrfs_inc_extent_ref(trans, &generic_ref);
2469 ret = btrfs_free_extent(trans, &generic_ref);
2479 int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2482 return __btrfs_mod_ref(trans, root, buf, full_backref, 1);
2485 int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
2488 return __btrfs_mod_ref(trans, root, buf, full_backref, 0);
2543 static int pin_down_extent(struct btrfs_trans_handle *trans,
2562 set_extent_dirty(&trans->transaction->pinned_extents, bytenr,
2567 int btrfs_pin_extent(struct btrfs_trans_handle *trans,
2572 cache = btrfs_lookup_block_group(trans->fs_info, bytenr);
2575 pin_down_extent(trans, cache, bytenr, num_bytes, reserved);
2584 int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle *trans,
2590 btrfs_add_excluded_extent(trans->fs_info, bytenr, num_bytes);
2592 cache = btrfs_lookup_block_group(trans->fs_info, bytenr);
2604 pin_down_extent(trans, cache, bytenr, num_bytes, 0);
2821 int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans)
2823 struct btrfs_fs_info *fs_info = trans->fs_info;
2831 unpin = &trans->transaction->pinned_extents;
2833 while (!TRANS_ABORTED(trans)) {
2868 deleted_bgs = &trans->transaction->deleted_bgs;
2873 if (!TRANS_ABORTED(trans))
2953 static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
2959 struct btrfs_fs_info *info = trans->fs_info;
2991 btrfs_abort_transaction(trans, ret);
2998 ret = lookup_extent_backref(trans, path, &iref, bytenr, num_bytes,
3036 btrfs_abort_transaction(trans, -EUCLEAN);
3040 ret = remove_extent_backref(trans, path, NULL,
3044 btrfs_abort_transaction(trans, ret);
3060 ret = btrfs_search_slot(trans, extent_root,
3082 ret = btrfs_search_slot(trans, extent_root,
3094 btrfs_abort_transaction(trans, ret);
3105 btrfs_abort_transaction(trans, ret);
3108 btrfs_abort_transaction(trans, ret);
3117 btrfs_abort_transaction(trans, ret);
3131 btrfs_abort_transaction(trans, -EUCLEAN);
3143 btrfs_abort_transaction(trans, -EUCLEAN);
3159 btrfs_abort_transaction(trans, -EUCLEAN);
3167 ret = remove_extent_backref(trans, path, iref,
3171 btrfs_abort_transaction(trans, ret);
3184 btrfs_abort_transaction(trans, -EUCLEAN);
3193 btrfs_abort_transaction(trans, -EUCLEAN);
3206 btrfs_abort_transaction(trans, -EUCLEAN);
3215 ret = btrfs_del_items(trans, extent_root, path, path->slots[0],
3218 btrfs_abort_transaction(trans, ret);
3224 ret = btrfs_del_csums(trans, info->csum_root, bytenr,
3227 btrfs_abort_transaction(trans, ret);
3232 ret = add_to_free_space_tree(trans, bytenr, num_bytes);
3234 btrfs_abort_transaction(trans, ret);
3238 ret = btrfs_update_block_group(trans, bytenr, num_bytes, 0);
3240 btrfs_abort_transaction(trans, ret);
3270 static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans,
3277 delayed_refs = &trans->transaction->delayed_refs;
3307 btrfs_cleanup_ref_head_accounting(trans->fs_info, delayed_refs, head);
3319 void btrfs_free_tree_block(struct btrfs_trans_handle *trans,
3335 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, NULL);
3339 if (last_ref && btrfs_header_generation(buf) == trans->transid) {
3343 ret = check_ref_cleanup(trans, buf->start);
3351 pin_down_extent(trans, cache, buf->start, buf->len, 1);
3374 int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_ref *ref)
3376 struct btrfs_fs_info *fs_info = trans->fs_info;
3391 btrfs_pin_extent(trans, ref->bytenr, ref->len, 1);
3394 ret = btrfs_add_delayed_tree_ref(trans, ref, NULL);
3396 ret = btrfs_add_delayed_data_ref(trans, ref, 0);
3856 struct btrfs_trans_handle *trans;
3859 trans = current->journal_info;
3860 if (trans)
3863 trans = btrfs_join_transaction(root);
3865 if (IS_ERR(trans)) {
3866 ret = PTR_ERR(trans);
3870 ret = btrfs_chunk_alloc(trans, ffe_ctl->flags,
3877 btrfs_abort_transaction(trans, ret);
3881 btrfs_end_transaction(trans);
4334 int btrfs_pin_reserved_extent(struct btrfs_trans_handle *trans, u64 start,
4340 cache = btrfs_lookup_block_group(trans->fs_info, start);
4342 btrfs_err(trans->fs_info, "unable to find block group for %llu",
4347 ret = pin_down_extent(trans, cache, start, len, 1);
4352 static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
4357 struct btrfs_fs_info *fs_info = trans->fs_info;
4378 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path,
4389 btrfs_set_extent_generation(leaf, extent_item, trans->transid);
4412 ret = remove_from_free_space_tree(trans, ins->objectid, ins->offset);
4416 ret = btrfs_update_block_group(trans, ins->objectid, ins->offset, 1);
4426 static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
4430 struct btrfs_fs_info *fs_info = trans->fs_info;
4463 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path,
4474 btrfs_set_extent_generation(leaf, extent_item, trans->transid);
4501 ret = remove_from_free_space_tree(trans, extent_key.objectid,
4506 ret = btrfs_update_block_group(trans, extent_key.objectid,
4519 int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
4533 return btrfs_add_delayed_data_ref(trans, &generic_ref, ram_bytes);
4541 int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans,
4545 struct btrfs_fs_info *fs_info = trans->fs_info;
4573 ret = alloc_reserved_file_extent(trans, 0, root_objectid, 0, owner,
4576 btrfs_pin_extent(trans, ins->objectid, ins->offset, 1);
4582 btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root,
4617 btrfs_set_header_generation(buf, trans->transid);
4636 set_extent_dirty(&trans->transaction->dirty_pages, buf->start,
4639 trans->dirty = true;
4648 struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans,
4669 buf = btrfs_init_new_buffer(trans, root, root->alloc_bytenr,
4677 block_rsv = btrfs_use_block_rsv(trans, root, blocksize);
4686 buf = btrfs_init_new_buffer(trans, root, ins.objectid, level,
4721 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, extent_op);
4758 static noinline void reada_walk_down(struct btrfs_trans_handle *trans,
4803 ret = btrfs_lookup_extent_info(trans, fs_info, bytenr,
4846 static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
4869 ret = btrfs_lookup_extent_info(trans, fs_info,
4893 ret = btrfs_inc_ref(trans, root, eb, 1);
4895 ret = btrfs_dec_ref(trans, root, eb, 0);
4897 ret = btrfs_set_disk_extent_flags(trans, eb, flag,
4918 static int check_ref_exists(struct btrfs_trans_handle *trans,
4930 ret = lookup_extent_backref(trans, path, &iref, bytenr,
4954 static noinline int do_walk_down(struct btrfs_trans_handle *trans,
5002 ret = btrfs_lookup_extent_info(trans, fs_info, bytenr, level - 1, 1,
5050 reada_walk_down(trans, root, wc, path);
5103 ret = check_ref_exists(trans, root, bytenr, parent,
5120 ret = btrfs_qgroup_trace_subtree(trans, next,
5141 ret = btrfs_free_extent(trans, &ref);
5168 static noinline int walk_up_proc(struct btrfs_trans_handle *trans,
5203 ret = btrfs_lookup_extent_info(trans, fs_info,
5227 ret = btrfs_dec_ref(trans, root, eb, 1);
5229 ret = btrfs_dec_ref(trans, root, eb, 0);
5232 ret = btrfs_qgroup_trace_leaf_items(trans, eb);
5242 btrfs_header_generation(eb) == trans->transid) {
5263 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1);
5275 static noinline int walk_down_tree(struct btrfs_trans_handle *trans,
5285 ret = walk_down_proc(trans, root, path, wc, lookup_info);
5296 ret = do_walk_down(trans, root, path, wc, &lookup_info);
5307 static noinline int walk_up_tree(struct btrfs_trans_handle *trans,
5323 ret = walk_up_proc(trans, root, path, wc);
5359 struct btrfs_trans_handle *trans;
5389 trans = btrfs_join_transaction(tree_root);
5391 trans = btrfs_start_transaction(tree_root, 0);
5392 if (IS_ERR(trans)) {
5393 err = PTR_ERR(trans);
5397 err = btrfs_run_delayed_items(trans);
5446 ret = btrfs_lookup_extent_info(trans, fs_info,
5476 ret = walk_down_tree(trans, root, path, wc);
5482 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL);
5504 if (btrfs_should_end_transaction(trans) ||
5506 ret = btrfs_update_root(trans, tree_root,
5510 btrfs_abort_transaction(trans, ret);
5515 btrfs_end_transaction_throttle(trans);
5529 trans = btrfs_join_transaction(tree_root);
5531 trans = btrfs_start_transaction(tree_root, 0);
5532 if (IS_ERR(trans)) {
5533 err = PTR_ERR(trans);
5542 ret = btrfs_del_root(trans, &root->root_key);
5544 btrfs_abort_transaction(trans, ret);
5553 btrfs_abort_transaction(trans, ret);
5562 btrfs_del_orphan_item(trans, tree_root,
5576 btrfs_add_dropped_root(trans, root);
5581 btrfs_end_transaction_throttle(trans);
5604 int btrfs_drop_subtree(struct btrfs_trans_handle *trans,
5651 wret = walk_down_tree(trans, root, path, wc);
5657 wret = walk_up_tree(trans, root, path, wc, parent_level);