Lines Matching refs:trans
40 static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
48 static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
52 static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
151 int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, in btrfs_lookup_extent_info() argument
179 if (!trans) { in btrfs_lookup_extent_info()
192 ret = btrfs_search_slot(trans, fs_info->extent_root, &key, path, 0, 0); in btrfs_lookup_extent_info()
219 if (trans) in btrfs_lookup_extent_info()
220 btrfs_abort_transaction(trans, ret); in btrfs_lookup_extent_info()
234 if (!trans) in btrfs_lookup_extent_info()
237 delayed_refs = &trans->transaction->delayed_refs; in btrfs_lookup_extent_info()
476 static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans, in lookup_extent_data_ref() argument
482 struct btrfs_root *root = trans->fs_info->extent_root; in lookup_extent_data_ref()
502 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_extent_data_ref()
552 static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans, in insert_extent_data_ref() argument
558 struct btrfs_root *root = trans->fs_info->extent_root; in insert_extent_data_ref()
577 ret = btrfs_insert_empty_item(trans, root, path, &key, size); in insert_extent_data_ref()
603 ret = btrfs_insert_empty_item(trans, root, path, &key, in insert_extent_data_ref()
631 static noinline int remove_extent_data_ref(struct btrfs_trans_handle *trans, in remove_extent_data_ref() argument
654 btrfs_print_v0_err(trans->fs_info); in remove_extent_data_ref()
655 btrfs_abort_transaction(trans, -EINVAL); in remove_extent_data_ref()
665 ret = btrfs_del_item(trans, trans->fs_info->extent_root, path); in remove_extent_data_ref()
719 static noinline int lookup_tree_block_ref(struct btrfs_trans_handle *trans, in lookup_tree_block_ref() argument
724 struct btrfs_root *root = trans->fs_info->extent_root; in lookup_tree_block_ref()
737 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_tree_block_ref()
743 static noinline int insert_tree_block_ref(struct btrfs_trans_handle *trans, in insert_tree_block_ref() argument
760 ret = btrfs_insert_empty_item(trans, trans->fs_info->extent_root, in insert_tree_block_ref()
818 int lookup_inline_extent_backref(struct btrfs_trans_handle *trans, in lookup_inline_extent_backref() argument
825 struct btrfs_fs_info *fs_info = trans->fs_info; in lookup_inline_extent_backref()
864 ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1); in lookup_inline_extent_backref()
912 btrfs_abort_transaction(trans, err); in lookup_inline_extent_backref()
1076 static int lookup_extent_backref(struct btrfs_trans_handle *trans, in lookup_extent_backref() argument
1084 ret = lookup_inline_extent_backref(trans, path, ref_ret, bytenr, in lookup_extent_backref()
1094 ret = lookup_tree_block_ref(trans, path, bytenr, parent, in lookup_extent_backref()
1097 ret = lookup_extent_data_ref(trans, path, bytenr, parent, in lookup_extent_backref()
1174 int insert_inline_extent_backref(struct btrfs_trans_handle *trans, in insert_inline_extent_backref() argument
1184 ret = lookup_inline_extent_backref(trans, path, &iref, bytenr, in insert_inline_extent_backref()
1192 setup_inline_extent_backref(trans->fs_info, path, iref, parent, in insert_inline_extent_backref()
1200 static int insert_extent_backref(struct btrfs_trans_handle *trans, in insert_extent_backref() argument
1208 ret = insert_tree_block_ref(trans, path, bytenr, parent, in insert_extent_backref()
1211 ret = insert_extent_data_ref(trans, path, bytenr, parent, in insert_extent_backref()
1218 static int remove_extent_backref(struct btrfs_trans_handle *trans, in remove_extent_backref() argument
1230 ret = remove_extent_data_ref(trans, path, refs_to_drop, in remove_extent_backref()
1234 ret = btrfs_del_item(trans, trans->fs_info->extent_root, path); in remove_extent_backref()
1401 int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, in btrfs_inc_extent_ref() argument
1404 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_inc_extent_ref()
1414 ret = btrfs_add_delayed_tree_ref(trans, generic_ref, in btrfs_inc_extent_ref()
1417 ret = btrfs_add_delayed_data_ref(trans, generic_ref, 0, in btrfs_inc_extent_ref()
1462 static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, in __btrfs_inc_extent_ref() argument
1484 ret = insert_inline_extent_backref(trans, path, bytenr, num_bytes, in __btrfs_inc_extent_ref()
1509 ret = insert_extent_backref(trans, path, bytenr, parent, root_objectid, in __btrfs_inc_extent_ref()
1512 btrfs_abort_transaction(trans, ret); in __btrfs_inc_extent_ref()
1518 static int run_delayed_data_ref(struct btrfs_trans_handle *trans, in run_delayed_data_ref() argument
1535 trace_run_delayed_data_ref(trans->fs_info, node, ref, node->action); in run_delayed_data_ref()
1544 ret = alloc_reserved_file_extent(trans, parent, ref_root, in run_delayed_data_ref()
1549 ret = __btrfs_inc_extent_ref(trans, node, parent, ref_root, in run_delayed_data_ref()
1553 ret = __btrfs_free_extent(trans, node, parent, in run_delayed_data_ref()
1581 static int run_delayed_extent_op(struct btrfs_trans_handle *trans, in run_delayed_extent_op() argument
1585 struct btrfs_fs_info *fs_info = trans->fs_info; in run_delayed_extent_op()
1595 if (TRANS_ABORTED(trans)) in run_delayed_extent_op()
1618 ret = btrfs_search_slot(trans, fs_info->extent_root, &key, path, 0, 1); in run_delayed_extent_op()
1655 btrfs_abort_transaction(trans, err); in run_delayed_extent_op()
1668 static int run_delayed_tree_ref(struct btrfs_trans_handle *trans, in run_delayed_tree_ref() argument
1679 trace_run_delayed_tree_ref(trans->fs_info, node, ref, node->action); in run_delayed_tree_ref()
1686 btrfs_err(trans->fs_info, in run_delayed_tree_ref()
1694 ret = alloc_reserved_tree_block(trans, node, extent_op); in run_delayed_tree_ref()
1696 ret = __btrfs_inc_extent_ref(trans, node, parent, ref_root, in run_delayed_tree_ref()
1699 ret = __btrfs_free_extent(trans, node, parent, ref_root, in run_delayed_tree_ref()
1708 static int run_one_delayed_ref(struct btrfs_trans_handle *trans, in run_one_delayed_ref() argument
1715 if (TRANS_ABORTED(trans)) { in run_one_delayed_ref()
1717 btrfs_pin_extent(trans->fs_info, node->bytenr, in run_one_delayed_ref()
1724 ret = run_delayed_tree_ref(trans, node, extent_op, in run_one_delayed_ref()
1728 ret = run_delayed_data_ref(trans, node, extent_op, in run_one_delayed_ref()
1733 btrfs_pin_extent(trans->fs_info, node->bytenr, in run_one_delayed_ref()
1788 static int run_and_cleanup_extent_op(struct btrfs_trans_handle *trans, in run_and_cleanup_extent_op() argument
1799 ret = run_delayed_extent_op(trans, head, extent_op); in run_and_cleanup_extent_op()
1843 static int cleanup_ref_head(struct btrfs_trans_handle *trans, in cleanup_ref_head() argument
1847 struct btrfs_fs_info *fs_info = trans->fs_info; in cleanup_ref_head()
1851 delayed_refs = &trans->transaction->delayed_refs; in cleanup_ref_head()
1853 ret = run_and_cleanup_extent_op(trans, head); in cleanup_ref_head()
1882 ret = btrfs_del_csums(trans, fs_info->csum_root, in cleanup_ref_head()
1896 struct btrfs_trans_handle *trans) in btrfs_obtain_ref_head() argument
1899 &trans->transaction->delayed_refs; in btrfs_obtain_ref_head()
1928 static int btrfs_run_delayed_refs_for_head(struct btrfs_trans_handle *trans, in btrfs_run_delayed_refs_for_head() argument
1932 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_run_delayed_refs_for_head()
1939 delayed_refs = &trans->transaction->delayed_refs; in btrfs_run_delayed_refs_for_head()
1986 ret = run_one_delayed_ref(trans, ref, extent_op, in btrfs_run_delayed_refs_for_head()
2002 btrfs_merge_delayed_refs(trans, delayed_refs, locked_ref); in btrfs_run_delayed_refs_for_head()
2012 static noinline int __btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, in __btrfs_run_delayed_refs() argument
2015 struct btrfs_fs_info *fs_info = trans->fs_info; in __btrfs_run_delayed_refs()
2023 delayed_refs = &trans->transaction->delayed_refs; in __btrfs_run_delayed_refs()
2026 locked_ref = btrfs_obtain_ref_head(trans); in __btrfs_run_delayed_refs()
2049 btrfs_merge_delayed_refs(trans, delayed_refs, locked_ref); in __btrfs_run_delayed_refs()
2051 ret = btrfs_run_delayed_refs_for_head(trans, locked_ref, in __btrfs_run_delayed_refs()
2064 ret = cleanup_ref_head(trans, locked_ref); in __btrfs_run_delayed_refs()
2192 int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, in btrfs_run_delayed_refs() argument
2195 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_run_delayed_refs()
2203 if (TRANS_ABORTED(trans)) in btrfs_run_delayed_refs()
2209 delayed_refs = &trans->transaction->delayed_refs; in btrfs_run_delayed_refs()
2217 ret = __btrfs_run_delayed_refs(trans, count); in btrfs_run_delayed_refs()
2219 btrfs_abort_transaction(trans, ret); in btrfs_run_delayed_refs()
2224 btrfs_create_pending_block_groups(trans); in btrfs_run_delayed_refs()
2249 int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans, in btrfs_set_disk_extent_flags() argument
2266 ret = btrfs_add_delayed_extent_op(trans, bytenr, num_bytes, extent_op); in btrfs_set_disk_extent_flags()
2453 static int __btrfs_mod_ref(struct btrfs_trans_handle *trans, in __btrfs_mod_ref() argument
2515 ret = btrfs_inc_extent_ref(trans, &generic_ref); in __btrfs_mod_ref()
2517 ret = btrfs_free_extent(trans, &generic_ref); in __btrfs_mod_ref()
2529 ret = btrfs_inc_extent_ref(trans, &generic_ref); in __btrfs_mod_ref()
2531 ret = btrfs_free_extent(trans, &generic_ref); in __btrfs_mod_ref()
2541 int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_inc_ref() argument
2544 return __btrfs_mod_ref(trans, root, buf, full_backref, 1); in btrfs_inc_ref()
2547 int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_dec_ref() argument
2550 return __btrfs_mod_ref(trans, root, buf, full_backref, 0); in btrfs_dec_ref()
2916 int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans) in btrfs_finish_extent_commit() argument
2918 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_finish_extent_commit()
2931 while (!TRANS_ABORTED(trans)) { in btrfs_finish_extent_commit()
2958 deleted_bgs = &trans->transaction->deleted_bgs; in btrfs_finish_extent_commit()
2963 if (!TRANS_ABORTED(trans)) in btrfs_finish_extent_commit()
2984 static int __btrfs_free_extent(struct btrfs_trans_handle *trans, in __btrfs_free_extent() argument
2990 struct btrfs_fs_info *info = trans->fs_info; in __btrfs_free_extent()
3022 ret = lookup_extent_backref(trans, path, &iref, bytenr, num_bytes, in __btrfs_free_extent()
3049 ret = remove_extent_backref(trans, path, NULL, in __btrfs_free_extent()
3053 btrfs_abort_transaction(trans, ret); in __btrfs_free_extent()
3068 ret = btrfs_search_slot(trans, extent_root, in __btrfs_free_extent()
3090 ret = btrfs_search_slot(trans, extent_root, in __btrfs_free_extent()
3102 btrfs_abort_transaction(trans, ret); in __btrfs_free_extent()
3113 btrfs_abort_transaction(trans, ret); in __btrfs_free_extent()
3116 btrfs_abort_transaction(trans, ret); in __btrfs_free_extent()
3125 btrfs_abort_transaction(trans, ret); in __btrfs_free_extent()
3144 btrfs_abort_transaction(trans, ret); in __btrfs_free_extent()
3163 ret = remove_extent_backref(trans, path, iref, in __btrfs_free_extent()
3167 btrfs_abort_transaction(trans, ret); in __btrfs_free_extent()
3185 ret = btrfs_del_items(trans, extent_root, path, path->slots[0], in __btrfs_free_extent()
3188 btrfs_abort_transaction(trans, ret); in __btrfs_free_extent()
3194 ret = btrfs_del_csums(trans, info->csum_root, bytenr, in __btrfs_free_extent()
3197 btrfs_abort_transaction(trans, ret); in __btrfs_free_extent()
3202 ret = add_to_free_space_tree(trans, bytenr, num_bytes); in __btrfs_free_extent()
3204 btrfs_abort_transaction(trans, ret); in __btrfs_free_extent()
3208 ret = btrfs_update_block_group(trans, bytenr, num_bytes, 0); in __btrfs_free_extent()
3210 btrfs_abort_transaction(trans, ret); in __btrfs_free_extent()
3227 static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans, in check_ref_cleanup() argument
3234 delayed_refs = &trans->transaction->delayed_refs; in check_ref_cleanup()
3264 btrfs_cleanup_ref_head_accounting(trans->fs_info, delayed_refs, head); in check_ref_cleanup()
3276 void btrfs_free_tree_block(struct btrfs_trans_handle *trans, in btrfs_free_tree_block() argument
3295 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, NULL, in btrfs_free_tree_block()
3301 if (last_ref && btrfs_header_generation(buf) == trans->transid) { in btrfs_free_tree_block()
3305 ret = check_ref_cleanup(trans, buf->start); in btrfs_free_tree_block()
3340 int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_ref *ref) in btrfs_free_extent() argument
3342 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_free_extent()
3362 ret = btrfs_add_delayed_tree_ref(trans, ref, NULL, in btrfs_free_extent()
3365 ret = btrfs_add_delayed_data_ref(trans, ref, 0, in btrfs_free_extent()
3737 struct btrfs_trans_handle *trans; in find_free_extent_update_loop() local
3740 trans = current->journal_info; in find_free_extent_update_loop()
3741 if (trans) in find_free_extent_update_loop()
3744 trans = btrfs_join_transaction(root); in find_free_extent_update_loop()
3746 if (IS_ERR(trans)) { in find_free_extent_update_loop()
3747 ret = PTR_ERR(trans); in find_free_extent_update_loop()
3751 ret = btrfs_chunk_alloc(trans, ffe_ctl->flags, in find_free_extent_update_loop()
3764 btrfs_abort_transaction(trans, ret); in find_free_extent_update_loop()
3768 btrfs_end_transaction(trans); in find_free_extent_update_loop()
4229 static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans, in alloc_reserved_file_extent() argument
4234 struct btrfs_fs_info *fs_info = trans->fs_info; in alloc_reserved_file_extent()
4255 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path, in alloc_reserved_file_extent()
4266 btrfs_set_extent_generation(leaf, extent_item, trans->transid); in alloc_reserved_file_extent()
4289 ret = remove_from_free_space_tree(trans, ins->objectid, ins->offset); in alloc_reserved_file_extent()
4293 ret = btrfs_update_block_group(trans, ins->objectid, ins->offset, 1); in alloc_reserved_file_extent()
4303 static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans, in alloc_reserved_tree_block() argument
4307 struct btrfs_fs_info *fs_info = trans->fs_info; in alloc_reserved_tree_block()
4340 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path, in alloc_reserved_tree_block()
4351 btrfs_set_extent_generation(leaf, extent_item, trans->transid); in alloc_reserved_tree_block()
4378 ret = remove_from_free_space_tree(trans, extent_key.objectid, in alloc_reserved_tree_block()
4383 ret = btrfs_update_block_group(trans, extent_key.objectid, in alloc_reserved_tree_block()
4396 int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans, in btrfs_alloc_reserved_file_extent() argument
4410 ret = btrfs_add_delayed_data_ref(trans, &generic_ref, in btrfs_alloc_reserved_file_extent()
4420 int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans, in btrfs_alloc_logged_file_extent() argument
4424 struct btrfs_fs_info *fs_info = trans->fs_info; in btrfs_alloc_logged_file_extent()
4452 ret = alloc_reserved_file_extent(trans, 0, root_objectid, 0, owner, in btrfs_alloc_logged_file_extent()
4461 btrfs_init_new_buffer(struct btrfs_trans_handle *trans, struct btrfs_root *root, in btrfs_init_new_buffer() argument
4495 btrfs_set_header_generation(buf, trans->transid); in btrfs_init_new_buffer()
4514 set_extent_dirty(&trans->transaction->dirty_pages, buf->start, in btrfs_init_new_buffer()
4517 trans->dirty = true; in btrfs_init_new_buffer()
4526 struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans, in btrfs_alloc_tree_block() argument
4546 buf = btrfs_init_new_buffer(trans, root, root->alloc_bytenr, in btrfs_alloc_tree_block()
4554 block_rsv = btrfs_use_block_rsv(trans, root, blocksize); in btrfs_alloc_tree_block()
4563 buf = btrfs_init_new_buffer(trans, root, ins.objectid, level, in btrfs_alloc_tree_block()
4598 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, in btrfs_alloc_tree_block()
4636 static noinline void reada_walk_down(struct btrfs_trans_handle *trans, in reada_walk_down() argument
4681 ret = btrfs_lookup_extent_info(trans, fs_info, bytenr, in reada_walk_down()
4724 static noinline int walk_down_proc(struct btrfs_trans_handle *trans, in walk_down_proc() argument
4747 ret = btrfs_lookup_extent_info(trans, fs_info, in walk_down_proc()
4771 ret = btrfs_inc_ref(trans, root, eb, 1); in walk_down_proc()
4773 ret = btrfs_dec_ref(trans, root, eb, 0); in walk_down_proc()
4775 ret = btrfs_set_disk_extent_flags(trans, eb->start, in walk_down_proc()
4797 static int check_ref_exists(struct btrfs_trans_handle *trans, in check_ref_exists() argument
4809 ret = lookup_extent_backref(trans, path, &iref, bytenr, in check_ref_exists()
4833 static noinline int do_walk_down(struct btrfs_trans_handle *trans, in do_walk_down() argument
4881 ret = btrfs_lookup_extent_info(trans, fs_info, bytenr, level - 1, 1, in do_walk_down()
4929 reada_walk_down(trans, root, wc, path); in do_walk_down()
4982 ret = check_ref_exists(trans, root, bytenr, parent, in do_walk_down()
4999 ret = btrfs_qgroup_trace_subtree(trans, next, in do_walk_down()
5020 ret = btrfs_free_extent(trans, &ref); in do_walk_down()
5047 static noinline int walk_up_proc(struct btrfs_trans_handle *trans, in walk_up_proc() argument
5082 ret = btrfs_lookup_extent_info(trans, fs_info, in walk_up_proc()
5106 ret = btrfs_dec_ref(trans, root, eb, 1); in walk_up_proc()
5108 ret = btrfs_dec_ref(trans, root, eb, 0); in walk_up_proc()
5111 ret = btrfs_qgroup_trace_leaf_items(trans, eb); in walk_up_proc()
5121 btrfs_header_generation(eb) == trans->transid) { in walk_up_proc()
5142 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); in walk_up_proc()
5154 static noinline int walk_down_tree(struct btrfs_trans_handle *trans, in walk_down_tree() argument
5164 ret = walk_down_proc(trans, root, path, wc, lookup_info); in walk_down_tree()
5175 ret = do_walk_down(trans, root, path, wc, &lookup_info); in walk_down_tree()
5186 static noinline int walk_up_tree(struct btrfs_trans_handle *trans, in walk_up_tree() argument
5202 ret = walk_up_proc(trans, root, path, wc); in walk_up_tree()
5240 struct btrfs_trans_handle *trans; in btrfs_drop_snapshot() local
5270 trans = btrfs_join_transaction(tree_root); in btrfs_drop_snapshot()
5272 trans = btrfs_start_transaction(tree_root, 0); in btrfs_drop_snapshot()
5273 if (IS_ERR(trans)) { in btrfs_drop_snapshot()
5274 err = PTR_ERR(trans); in btrfs_drop_snapshot()
5278 err = btrfs_run_delayed_items(trans); in btrfs_drop_snapshot()
5283 trans->block_rsv = block_rsv; in btrfs_drop_snapshot()
5330 ret = btrfs_lookup_extent_info(trans, fs_info, in btrfs_drop_snapshot()
5360 ret = walk_down_tree(trans, root, path, wc); in btrfs_drop_snapshot()
5366 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL); in btrfs_drop_snapshot()
5388 if (btrfs_should_end_transaction(trans) || in btrfs_drop_snapshot()
5390 ret = btrfs_update_root(trans, tree_root, in btrfs_drop_snapshot()
5394 btrfs_abort_transaction(trans, ret); in btrfs_drop_snapshot()
5399 btrfs_end_transaction_throttle(trans); in btrfs_drop_snapshot()
5413 trans = btrfs_join_transaction(tree_root); in btrfs_drop_snapshot()
5415 trans = btrfs_start_transaction(tree_root, 0); in btrfs_drop_snapshot()
5416 if (IS_ERR(trans)) { in btrfs_drop_snapshot()
5417 err = PTR_ERR(trans); in btrfs_drop_snapshot()
5421 trans->block_rsv = block_rsv; in btrfs_drop_snapshot()
5428 ret = btrfs_del_root(trans, &root->root_key); in btrfs_drop_snapshot()
5430 btrfs_abort_transaction(trans, ret); in btrfs_drop_snapshot()
5439 btrfs_abort_transaction(trans, ret); in btrfs_drop_snapshot()
5448 btrfs_del_orphan_item(trans, tree_root, in btrfs_drop_snapshot()
5454 btrfs_add_dropped_root(trans, root); in btrfs_drop_snapshot()
5462 btrfs_end_transaction_throttle(trans); in btrfs_drop_snapshot()
5485 int btrfs_drop_subtree(struct btrfs_trans_handle *trans, in btrfs_drop_subtree() argument
5532 wret = walk_down_tree(trans, root, path, wc); in btrfs_drop_subtree()
5538 wret = walk_up_tree(trans, root, path, wc, parent_level); in btrfs_drop_subtree()