]>
Commit | Line | Data |
---|---|---|
a0231804 JB |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | ||
3 | #ifndef BTRFS_EXTENT_TREE_H | |
4 | #define BTRFS_EXTENT_TREE_H | |
5 | ||
cfc2de0f BB |
6 | #include "misc.h" |
7 | #include "block-group.h" | |
8 | ||
9 | struct btrfs_free_cluster; | |
82cc2ade | 10 | struct btrfs_delayed_ref_head; |
cfc2de0f BB |
11 | |
12 | enum btrfs_extent_allocation_policy { | |
13 | BTRFS_EXTENT_ALLOC_CLUSTERED, | |
14 | BTRFS_EXTENT_ALLOC_ZONED, | |
15 | }; | |
16 | ||
17 | struct find_free_extent_ctl { | |
18 | /* Basic allocation info */ | |
19 | u64 ram_bytes; | |
20 | u64 num_bytes; | |
21 | u64 min_alloc_size; | |
22 | u64 empty_size; | |
23 | u64 flags; | |
24 | int delalloc; | |
25 | ||
26 | /* Where to start the search inside the bg */ | |
27 | u64 search_start; | |
28 | ||
29 | /* For clustered allocation */ | |
30 | u64 empty_cluster; | |
31 | struct btrfs_free_cluster *last_ptr; | |
32 | bool use_cluster; | |
33 | ||
34 | bool have_caching_bg; | |
35 | bool orig_have_caching_bg; | |
36 | ||
37 | /* Allocation is called for tree-log */ | |
38 | bool for_treelog; | |
39 | ||
40 | /* Allocation is called for data relocation */ | |
41 | bool for_data_reloc; | |
42 | ||
43 | /* RAID index, converted from flags */ | |
44 | int index; | |
45 | ||
46 | /* | |
47 | * Current loop number, check find_free_extent_update_loop() for details | |
48 | */ | |
49 | int loop; | |
50 | ||
51 | /* | |
cd361199 JB |
52 | * Set to true if we're retrying the allocation on this block group |
53 | * after waiting for caching progress, this is so that we retry only | |
54 | * once before moving on to another block group. | |
cfc2de0f | 55 | */ |
cd361199 | 56 | bool retry_uncached; |
cfc2de0f BB |
57 | |
58 | /* If current block group is cached */ | |
59 | int cached; | |
60 | ||
61 | /* Max contiguous hole found */ | |
62 | u64 max_extent_size; | |
63 | ||
64 | /* Total free space from free space cache, not always contiguous */ | |
65 | u64 total_free_space; | |
66 | ||
67 | /* Found result */ | |
68 | u64 found_offset; | |
69 | ||
70 | /* Hint where to start looking for an empty space */ | |
71 | u64 hint_byte; | |
72 | ||
73 | /* Allocation policy */ | |
74 | enum btrfs_extent_allocation_policy policy; | |
854c2f36 BB |
75 | |
76 | /* Whether or not the allocator is currently following a hint */ | |
77 | bool hinted; | |
52bb7a21 BB |
78 | |
79 | /* Size class of block groups to prefer in early loops */ | |
80 | enum btrfs_block_group_size_class size_class; | |
cfc2de0f BB |
81 | }; |
82 | ||
a0231804 JB |
83 | enum btrfs_inline_ref_type { |
84 | BTRFS_REF_TYPE_INVALID, | |
85 | BTRFS_REF_TYPE_BLOCK, | |
86 | BTRFS_REF_TYPE_DATA, | |
87 | BTRFS_REF_TYPE_ANY, | |
88 | }; | |
89 | ||
90 | int btrfs_get_extent_inline_ref_type(const struct extent_buffer *eb, | |
91 | struct btrfs_extent_inline_ref *iref, | |
92 | enum btrfs_inline_ref_type is_data); | |
93 | u64 hash_extent_data_ref(u64 root_objectid, u64 owner, u64 offset); | |
94 | ||
8a526c44 FM |
95 | int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans, u64 min_bytes); |
96 | u64 btrfs_cleanup_ref_head_accounting(struct btrfs_fs_info *fs_info, | |
a0231804 JB |
97 | struct btrfs_delayed_ref_root *delayed_refs, |
98 | struct btrfs_delayed_ref_head *head); | |
99 | int btrfs_lookup_data_extent(struct btrfs_fs_info *fs_info, u64 start, u64 len); | |
100 | int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans, | |
101 | struct btrfs_fs_info *fs_info, u64 bytenr, | |
d8ba2a91 JB |
102 | u64 offset, int metadata, u64 *refs, u64 *flags, |
103 | u64 *owner_root); | |
a0231804 JB |
104 | int btrfs_pin_extent(struct btrfs_trans_handle *trans, u64 bytenr, u64 num, |
105 | int reserved); | |
106 | int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle *trans, | |
007dec8c | 107 | const struct extent_buffer *eb); |
a0231804 JB |
108 | int btrfs_exclude_logged_extents(struct extent_buffer *eb); |
109 | int btrfs_cross_ref_exist(struct btrfs_root *root, | |
110 | u64 objectid, u64 offset, u64 bytenr, bool strict, | |
111 | struct btrfs_path *path); | |
112 | struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans, | |
113 | struct btrfs_root *root, | |
114 | u64 parent, u64 root_objectid, | |
115 | const struct btrfs_disk_key *key, | |
116 | int level, u64 hint, | |
117 | u64 empty_size, | |
60ea105a | 118 | u64 reloc_src_root, |
a0231804 JB |
119 | enum btrfs_lock_nesting nest); |
120 | void btrfs_free_tree_block(struct btrfs_trans_handle *trans, | |
121 | u64 root_id, | |
122 | struct extent_buffer *buf, | |
123 | u64 parent, int last_ref); | |
124 | int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans, | |
125 | struct btrfs_root *root, u64 owner, | |
126 | u64 offset, u64 ram_bytes, | |
127 | struct btrfs_key *ins); | |
128 | int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans, | |
129 | u64 root_objectid, u64 owner, u64 offset, | |
130 | struct btrfs_key *ins); | |
131 | int btrfs_reserve_extent(struct btrfs_root *root, u64 ram_bytes, u64 num_bytes, | |
132 | u64 min_alloc_size, u64 empty_size, u64 hint_byte, | |
133 | struct btrfs_key *ins, int is_data, int delalloc); | |
134 | int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, | |
135 | struct extent_buffer *buf, int full_backref); | |
136 | int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root, | |
137 | struct extent_buffer *buf, int full_backref); | |
138 | int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans, | |
4aec05fa | 139 | struct extent_buffer *eb, u64 flags); |
a0231804 JB |
140 | int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_ref *ref); |
141 | ||
8d299091 BB |
142 | u64 btrfs_get_extent_owner_root(struct btrfs_fs_info *fs_info, |
143 | struct extent_buffer *leaf, int slot); | |
a0231804 JB |
144 | int btrfs_free_reserved_extent(struct btrfs_fs_info *fs_info, |
145 | u64 start, u64 len, int delalloc); | |
f863c502 DS |
146 | int btrfs_pin_reserved_extent(struct btrfs_trans_handle *trans, |
147 | const struct extent_buffer *eb); | |
a0231804 JB |
148 | int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans); |
149 | int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans, struct btrfs_ref *generic_ref); | |
203f6a87 | 150 | int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, |
cc68414c JB |
151 | int for_reloc); |
152 | int btrfs_drop_subtree(struct btrfs_trans_handle *trans, | |
153 | struct btrfs_root *root, | |
154 | struct extent_buffer *node, | |
155 | struct extent_buffer *parent); | |
a0231804 JB |
156 | |
157 | #endif |