1 /* SPDX-License-Identifier: GPL-2.0 */
3 #ifndef BTRFS_EXTENT_TREE_H
4 #define BTRFS_EXTENT_TREE_H
6 #include <linux/types.h>
8 #include "block-group.h"
12 struct btrfs_free_cluster
;
17 struct btrfs_disk_key
;
18 struct btrfs_delayed_ref_head
;
19 struct btrfs_delayed_ref_root
;
20 struct btrfs_extent_inline_ref
;
22 enum btrfs_extent_allocation_policy
{
23 BTRFS_EXTENT_ALLOC_CLUSTERED
,
24 BTRFS_EXTENT_ALLOC_ZONED
,
27 struct find_free_extent_ctl
{
28 /* Basic allocation info */
36 /* Where to start the search inside the bg */
39 /* For clustered allocation */
41 struct btrfs_free_cluster
*last_ptr
;
45 bool orig_have_caching_bg
;
47 /* Allocation is called for tree-log */
50 /* Allocation is called for data relocation */
53 /* RAID index, converted from flags */
57 * Current loop number, check find_free_extent_update_loop() for details
62 * Set to true if we're retrying the allocation on this block group
63 * after waiting for caching progress, this is so that we retry only
64 * once before moving on to another block group.
68 /* If current block group is cached */
71 /* Max contiguous hole found */
74 /* Total free space from free space cache, not always contiguous */
80 /* Hint where to start looking for an empty space */
83 /* Allocation policy */
84 enum btrfs_extent_allocation_policy policy
;
86 /* Whether or not the allocator is currently following a hint */
89 /* Size class of block groups to prefer in early loops */
90 enum btrfs_block_group_size_class size_class
;
93 enum btrfs_inline_ref_type
{
94 BTRFS_REF_TYPE_INVALID
,
100 int btrfs_get_extent_inline_ref_type(const struct extent_buffer
*eb
,
101 struct btrfs_extent_inline_ref
*iref
,
102 enum btrfs_inline_ref_type is_data
);
103 u64
hash_extent_data_ref(u64 root_objectid
, u64 owner
, u64 offset
);
105 int btrfs_run_delayed_refs(struct btrfs_trans_handle
*trans
, u64 min_bytes
);
106 u64
btrfs_cleanup_ref_head_accounting(struct btrfs_fs_info
*fs_info
,
107 struct btrfs_delayed_ref_root
*delayed_refs
,
108 struct btrfs_delayed_ref_head
*head
);
109 int btrfs_lookup_data_extent(struct btrfs_fs_info
*fs_info
, u64 start
, u64 len
);
110 int btrfs_lookup_extent_info(struct btrfs_trans_handle
*trans
,
111 struct btrfs_fs_info
*fs_info
, u64 bytenr
,
112 u64 offset
, int metadata
, u64
*refs
, u64
*flags
,
114 int btrfs_pin_extent(struct btrfs_trans_handle
*trans
, u64 bytenr
, u64 num
,
116 int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle
*trans
,
117 const struct extent_buffer
*eb
);
118 int btrfs_exclude_logged_extents(struct extent_buffer
*eb
);
119 int btrfs_cross_ref_exist(struct btrfs_root
*root
,
120 u64 objectid
, u64 offset
, u64 bytenr
, bool strict
,
121 struct btrfs_path
*path
);
122 struct extent_buffer
*btrfs_alloc_tree_block(struct btrfs_trans_handle
*trans
,
123 struct btrfs_root
*root
,
124 u64 parent
, u64 root_objectid
,
125 const struct btrfs_disk_key
*key
,
129 enum btrfs_lock_nesting nest
);
130 int btrfs_free_tree_block(struct btrfs_trans_handle
*trans
,
132 struct extent_buffer
*buf
,
133 u64 parent
, int last_ref
);
134 int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle
*trans
,
135 struct btrfs_root
*root
, u64 owner
,
136 u64 offset
, u64 ram_bytes
,
137 struct btrfs_key
*ins
);
138 int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle
*trans
,
139 u64 root_objectid
, u64 owner
, u64 offset
,
140 struct btrfs_key
*ins
);
141 int btrfs_reserve_extent(struct btrfs_root
*root
, u64 ram_bytes
, u64 num_bytes
,
142 u64 min_alloc_size
, u64 empty_size
, u64 hint_byte
,
143 struct btrfs_key
*ins
, int is_data
, int delalloc
);
144 int btrfs_inc_ref(struct btrfs_trans_handle
*trans
, struct btrfs_root
*root
,
145 struct extent_buffer
*buf
, int full_backref
);
146 int btrfs_dec_ref(struct btrfs_trans_handle
*trans
, struct btrfs_root
*root
,
147 struct extent_buffer
*buf
, int full_backref
);
148 int btrfs_set_disk_extent_flags(struct btrfs_trans_handle
*trans
,
149 struct extent_buffer
*eb
, u64 flags
);
150 int btrfs_free_extent(struct btrfs_trans_handle
*trans
, struct btrfs_ref
*ref
);
152 u64
btrfs_get_extent_owner_root(struct btrfs_fs_info
*fs_info
,
153 struct extent_buffer
*leaf
, int slot
);
154 int btrfs_free_reserved_extent(struct btrfs_fs_info
*fs_info
,
155 u64 start
, u64 len
, int delalloc
);
156 int btrfs_pin_reserved_extent(struct btrfs_trans_handle
*trans
,
157 const struct extent_buffer
*eb
);
158 int btrfs_finish_extent_commit(struct btrfs_trans_handle
*trans
);
159 int btrfs_inc_extent_ref(struct btrfs_trans_handle
*trans
, struct btrfs_ref
*generic_ref
);
160 int btrfs_drop_snapshot(struct btrfs_root
*root
, int update_ref
,
162 int btrfs_drop_subtree(struct btrfs_trans_handle
*trans
,
163 struct btrfs_root
*root
,
164 struct extent_buffer
*node
,
165 struct extent_buffer
*parent
);