0001
0002
0003 #ifndef BTRFS_EXTENT_IO_H
0004 #define BTRFS_EXTENT_IO_H
0005
0006 #include <linux/rbtree.h>
0007 #include <linux/refcount.h>
0008 #include <linux/fiemap.h>
0009 #include <linux/btrfs_tree.h>
0010 #include "compression.h"
0011 #include "ulist.h"
0012
0013 enum {
0014 EXTENT_BUFFER_UPTODATE,
0015 EXTENT_BUFFER_DIRTY,
0016 EXTENT_BUFFER_CORRUPT,
0017
0018 EXTENT_BUFFER_READAHEAD,
0019 EXTENT_BUFFER_TREE_REF,
0020 EXTENT_BUFFER_STALE,
0021 EXTENT_BUFFER_WRITEBACK,
0022
0023 EXTENT_BUFFER_READ_ERR,
0024 EXTENT_BUFFER_UNMAPPED,
0025 EXTENT_BUFFER_IN_TREE,
0026
0027 EXTENT_BUFFER_WRITE_ERR,
0028 EXTENT_BUFFER_NO_CHECK,
0029 };
0030
0031
0032 #define PAGE_UNLOCK (1 << 0)
0033
0034 #define PAGE_START_WRITEBACK (1 << 1)
0035 #define PAGE_END_WRITEBACK (1 << 2)
0036 #define PAGE_SET_ORDERED (1 << 3)
0037 #define PAGE_SET_ERROR (1 << 4)
0038 #define PAGE_LOCK (1 << 5)
0039
0040
0041
0042
0043
0044 #define EXTENT_PAGE_PRIVATE 1
0045
0046
0047
0048
0049
0050
0051
0052
0053 #define BIT_BYTE(nr) ((nr) / BITS_PER_BYTE)
0054 #define BYTE_MASK ((1 << BITS_PER_BYTE) - 1)
0055 #define BITMAP_FIRST_BYTE_MASK(start) \
0056 ((BYTE_MASK << ((start) & (BITS_PER_BYTE - 1))) & BYTE_MASK)
0057 #define BITMAP_LAST_BYTE_MASK(nbits) \
0058 (BYTE_MASK >> (-(nbits) & (BITS_PER_BYTE - 1)))
0059
0060 struct btrfs_bio;
0061 struct btrfs_root;
0062 struct btrfs_inode;
0063 struct btrfs_io_bio;
0064 struct btrfs_fs_info;
0065 struct io_failure_record;
0066 struct extent_io_tree;
0067
0068 typedef void (submit_bio_hook_t)(struct inode *inode, struct bio *bio,
0069 int mirror_num,
0070 enum btrfs_compression_type compress_type);
0071
0072 typedef blk_status_t (extent_submit_bio_start_t)(struct inode *inode,
0073 struct bio *bio, u64 dio_file_offset);
0074
0075 #define INLINE_EXTENT_BUFFER_PAGES (BTRFS_MAX_METADATA_BLOCKSIZE / PAGE_SIZE)
0076 struct extent_buffer {
0077 u64 start;
0078 unsigned long len;
0079 unsigned long bflags;
0080 struct btrfs_fs_info *fs_info;
0081 spinlock_t refs_lock;
0082 atomic_t refs;
0083 atomic_t io_pages;
0084 int read_mirror;
0085 struct rcu_head rcu_head;
0086 pid_t lock_owner;
0087
0088 s8 log_index;
0089
0090 struct rw_semaphore lock;
0091
0092 struct page *pages[INLINE_EXTENT_BUFFER_PAGES];
0093 struct list_head release_list;
0094 #ifdef CONFIG_BTRFS_DEBUG
0095 struct list_head leak_list;
0096 #endif
0097 };
0098
0099
0100
0101
0102 struct extent_changeset {
0103
0104 u64 bytes_changed;
0105
0106
0107 struct ulist range_changed;
0108 };
0109
0110 static inline void extent_changeset_init(struct extent_changeset *changeset)
0111 {
0112 changeset->bytes_changed = 0;
0113 ulist_init(&changeset->range_changed);
0114 }
0115
0116 static inline struct extent_changeset *extent_changeset_alloc(void)
0117 {
0118 struct extent_changeset *ret;
0119
0120 ret = kmalloc(sizeof(*ret), GFP_KERNEL);
0121 if (!ret)
0122 return NULL;
0123
0124 extent_changeset_init(ret);
0125 return ret;
0126 }
0127
0128 static inline void extent_changeset_release(struct extent_changeset *changeset)
0129 {
0130 if (!changeset)
0131 return;
0132 changeset->bytes_changed = 0;
0133 ulist_release(&changeset->range_changed);
0134 }
0135
0136 static inline void extent_changeset_free(struct extent_changeset *changeset)
0137 {
0138 if (!changeset)
0139 return;
0140 extent_changeset_release(changeset);
0141 kfree(changeset);
0142 }
0143
0144 struct extent_map_tree;
0145
0146 int try_release_extent_mapping(struct page *page, gfp_t mask);
0147 int try_release_extent_buffer(struct page *page);
0148
0149 int btrfs_read_folio(struct file *file, struct folio *folio);
0150 int extent_write_locked_range(struct inode *inode, u64 start, u64 end);
0151 int extent_writepages(struct address_space *mapping,
0152 struct writeback_control *wbc);
0153 int btree_write_cache_pages(struct address_space *mapping,
0154 struct writeback_control *wbc);
0155 void extent_readahead(struct readahead_control *rac);
0156 int extent_fiemap(struct btrfs_inode *inode, struct fiemap_extent_info *fieinfo,
0157 u64 start, u64 len);
0158 int set_page_extent_mapped(struct page *page);
0159 void clear_page_extent_mapped(struct page *page);
0160
0161 struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
0162 u64 start, u64 owner_root, int level);
0163 struct extent_buffer *__alloc_dummy_extent_buffer(struct btrfs_fs_info *fs_info,
0164 u64 start, unsigned long len);
0165 struct extent_buffer *alloc_dummy_extent_buffer(struct btrfs_fs_info *fs_info,
0166 u64 start);
0167 struct extent_buffer *btrfs_clone_extent_buffer(const struct extent_buffer *src);
0168 struct extent_buffer *find_extent_buffer(struct btrfs_fs_info *fs_info,
0169 u64 start);
0170 void free_extent_buffer(struct extent_buffer *eb);
0171 void free_extent_buffer_stale(struct extent_buffer *eb);
0172 #define WAIT_NONE 0
0173 #define WAIT_COMPLETE 1
0174 #define WAIT_PAGE_LOCK 2
0175 int read_extent_buffer_pages(struct extent_buffer *eb, int wait,
0176 int mirror_num);
0177 void wait_on_extent_buffer_writeback(struct extent_buffer *eb);
0178 void btrfs_readahead_tree_block(struct btrfs_fs_info *fs_info,
0179 u64 bytenr, u64 owner_root, u64 gen, int level);
0180 void btrfs_readahead_node_child(struct extent_buffer *node, int slot);
0181
0182 static inline int num_extent_pages(const struct extent_buffer *eb)
0183 {
0184
0185
0186
0187
0188
0189
0190
0191 return (eb->len >> PAGE_SHIFT) ?: 1;
0192 }
0193
0194 static inline int extent_buffer_uptodate(const struct extent_buffer *eb)
0195 {
0196 return test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags);
0197 }
0198
0199 int memcmp_extent_buffer(const struct extent_buffer *eb, const void *ptrv,
0200 unsigned long start, unsigned long len);
0201 void read_extent_buffer(const struct extent_buffer *eb, void *dst,
0202 unsigned long start,
0203 unsigned long len);
0204 int read_extent_buffer_to_user_nofault(const struct extent_buffer *eb,
0205 void __user *dst, unsigned long start,
0206 unsigned long len);
0207 void write_extent_buffer_fsid(const struct extent_buffer *eb, const void *src);
0208 void write_extent_buffer_chunk_tree_uuid(const struct extent_buffer *eb,
0209 const void *src);
0210 void write_extent_buffer(const struct extent_buffer *eb, const void *src,
0211 unsigned long start, unsigned long len);
0212 void copy_extent_buffer_full(const struct extent_buffer *dst,
0213 const struct extent_buffer *src);
0214 void copy_extent_buffer(const struct extent_buffer *dst,
0215 const struct extent_buffer *src,
0216 unsigned long dst_offset, unsigned long src_offset,
0217 unsigned long len);
0218 void memcpy_extent_buffer(const struct extent_buffer *dst,
0219 unsigned long dst_offset, unsigned long src_offset,
0220 unsigned long len);
0221 void memmove_extent_buffer(const struct extent_buffer *dst,
0222 unsigned long dst_offset, unsigned long src_offset,
0223 unsigned long len);
0224 void memzero_extent_buffer(const struct extent_buffer *eb, unsigned long start,
0225 unsigned long len);
0226 int extent_buffer_test_bit(const struct extent_buffer *eb, unsigned long start,
0227 unsigned long pos);
0228 void extent_buffer_bitmap_set(const struct extent_buffer *eb, unsigned long start,
0229 unsigned long pos, unsigned long len);
0230 void extent_buffer_bitmap_clear(const struct extent_buffer *eb,
0231 unsigned long start, unsigned long pos,
0232 unsigned long len);
0233 void clear_extent_buffer_dirty(const struct extent_buffer *eb);
0234 bool set_extent_buffer_dirty(struct extent_buffer *eb);
0235 void set_extent_buffer_uptodate(struct extent_buffer *eb);
0236 void clear_extent_buffer_uptodate(struct extent_buffer *eb);
0237 int extent_buffer_under_io(const struct extent_buffer *eb);
0238 void extent_range_clear_dirty_for_io(struct inode *inode, u64 start, u64 end);
0239 void extent_range_redirty_for_io(struct inode *inode, u64 start, u64 end);
0240 void extent_clear_unlock_delalloc(struct btrfs_inode *inode, u64 start, u64 end,
0241 struct page *locked_page,
0242 u32 bits_to_clear, unsigned long page_ops);
0243
0244 int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array);
0245 struct bio *btrfs_bio_alloc(unsigned int nr_iovecs);
0246 struct bio *btrfs_bio_clone_partial(struct bio *orig, u64 offset, u64 size);
0247
0248 void end_extent_writepage(struct page *page, int err, u64 start, u64 end);
0249 int btrfs_repair_eb_io_failure(const struct extent_buffer *eb, int mirror_num);
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259 struct io_failure_record {
0260 struct page *page;
0261 u64 start;
0262 u64 len;
0263 u64 logical;
0264 int this_mirror;
0265 int failed_mirror;
0266 int num_copies;
0267 };
0268
0269 int btrfs_repair_one_sector(struct inode *inode, struct btrfs_bio *failed_bbio,
0270 u32 bio_offset, struct page *page, unsigned int pgoff,
0271 submit_bio_hook_t *submit_bio_hook);
0272
0273 #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
0274 bool find_lock_delalloc_range(struct inode *inode,
0275 struct page *locked_page, u64 *start,
0276 u64 *end);
0277 #endif
0278 struct extent_buffer *alloc_test_extent_buffer(struct btrfs_fs_info *fs_info,
0279 u64 start);
0280
0281 #ifdef CONFIG_BTRFS_DEBUG
0282 void btrfs_extent_buffer_leak_debug_check(struct btrfs_fs_info *fs_info);
0283 #else
0284 #define btrfs_extent_buffer_leak_debug_check(fs_info) do {} while (0)
0285 #endif
0286
0287 #endif