~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/btrfs/extent-tree.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 
  3 #ifndef BTRFS_EXTENT_TREE_H
  4 #define BTRFS_EXTENT_TREE_H
  5 
  6 #include <linux/types.h>
  7 #include "misc.h"
  8 #include "block-group.h"
  9 #include "locking.h"
 10 
 11 struct extent_buffer;
 12 struct btrfs_free_cluster;
 13 struct btrfs_fs_info;
 14 struct btrfs_root;
 15 struct btrfs_path;
 16 struct btrfs_ref;
 17 struct btrfs_disk_key;
 18 struct btrfs_delayed_ref_head;
 19 struct btrfs_delayed_ref_root;
 20 struct btrfs_extent_inline_ref;
 21 
 22 enum btrfs_extent_allocation_policy {
 23         BTRFS_EXTENT_ALLOC_CLUSTERED,
 24         BTRFS_EXTENT_ALLOC_ZONED,
 25 };
 26 
 27 struct find_free_extent_ctl {
 28         /* Basic allocation info */
 29         u64 ram_bytes;
 30         u64 num_bytes;
 31         u64 min_alloc_size;
 32         u64 empty_size;
 33         u64 flags;
 34         int delalloc;
 35 
 36         /* Where to start the search inside the bg */
 37         u64 search_start;
 38 
 39         /* For clustered allocation */
 40         u64 empty_cluster;
 41         struct btrfs_free_cluster *last_ptr;
 42         bool use_cluster;
 43 
 44         bool have_caching_bg;
 45         bool orig_have_caching_bg;
 46 
 47         /* Allocation is called for tree-log */
 48         bool for_treelog;
 49 
 50         /* Allocation is called for data relocation */
 51         bool for_data_reloc;
 52 
 53         /* RAID index, converted from flags */
 54         int index;
 55 
 56         /*
 57          * Current loop number, check find_free_extent_update_loop() for details
 58          */
 59         int loop;
 60 
 61         /*
 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.
 65          */
 66         bool retry_uncached;
 67 
 68         /* If current block group is cached */
 69         int cached;
 70 
 71         /* Max contiguous hole found */
 72         u64 max_extent_size;
 73 
 74         /* Total free space from free space cache, not always contiguous */
 75         u64 total_free_space;
 76 
 77         /* Found result */
 78         u64 found_offset;
 79 
 80         /* Hint where to start looking for an empty space */
 81         u64 hint_byte;
 82 
 83         /* Allocation policy */
 84         enum btrfs_extent_allocation_policy policy;
 85 
 86         /* Whether or not the allocator is currently following a hint */
 87         bool hinted;
 88 
 89         /* Size class of block groups to prefer in early loops */
 90         enum btrfs_block_group_size_class size_class;
 91 };
 92 
 93 enum btrfs_inline_ref_type {
 94         BTRFS_REF_TYPE_INVALID,
 95         BTRFS_REF_TYPE_BLOCK,
 96         BTRFS_REF_TYPE_DATA,
 97         BTRFS_REF_TYPE_ANY,
 98 };
 99 
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);
104 
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,
113                              u64 *owner_root);
114 int btrfs_pin_extent(struct btrfs_trans_handle *trans, u64 bytenr, u64 num,
115                      int reserved);
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,
126                                              int level, u64 hint,
127                                              u64 empty_size,
128                                              u64 reloc_src_root,
129                                              enum btrfs_lock_nesting nest);
130 int btrfs_free_tree_block(struct btrfs_trans_handle *trans,
131                           u64 root_id,
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);
151 
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,
161                                      int for_reloc);
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);
166 
167 #endif
168 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php