1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 #ifndef BTRFS_EXTENT_IO_H 4 #define BTRFS_EXTENT_IO_H 5 6 #include <linux/rbtree.h> 7 #include <linux/refcount.h> 8 #include "ulist.h" 9 10 /* 11 * flags for bio submission. The high bits indicate the compression 12 * type for this bio 13 */ 14 #define EXTENT_BIO_COMPRESSED 1 15 #define EXTENT_BIO_FLAG_SHIFT 16 16 17 enum { 18 EXTENT_BUFFER_UPTODATE, 19 EXTENT_BUFFER_DIRTY, 20 EXTENT_BUFFER_CORRUPT, 21 /* this got triggered by readahead */ 22 EXTENT_BUFFER_READAHEAD, 23 EXTENT_BUFFER_TREE_REF, 24 EXTENT_BUFFER_STALE, 25 EXTENT_BUFFER_WRITEBACK, 26 /* read IO error */ 27 EXTENT_BUFFER_READ_ERR, 28 EXTENT_BUFFER_UNMAPPED, 29 EXTENT_BUFFER_IN_TREE, 30 /* write IO error */ 31 EXTENT_BUFFER_WRITE_ERR, 32 }; 33 34 /* these are flags for __process_pages_contig */ 35 #define PAGE_UNLOCK (1 << 0) 36 #define PAGE_CLEAR_DIRTY (1 << 1) 37 #define PAGE_SET_WRITEBACK (1 << 2) 38 #define PAGE_END_WRITEBACK (1 << 3) 39 #define PAGE_SET_PRIVATE2 (1 << 4) 40 #define PAGE_SET_ERROR (1 << 5) 41 #define PAGE_LOCK (1 << 6) 42 43 /* 44 * page->private values. Every page that is controlled by the extent 45 * map has page->private set to one. 46 */ 47 #define EXTENT_PAGE_PRIVATE 1 48 49 /* 50 * The extent buffer bitmap operations are done with byte granularity instead of 51 * word granularity for two reasons: 52 * 1. The bitmaps must be little-endian on disk. 53 * 2. Bitmap items are not guaranteed to be aligned to a word and therefore a 54 * single word in a bitmap may straddle two pages in the extent buffer. 55 */ 56 #define BIT_BYTE(nr) ((nr) / BITS_PER_BYTE) 57 #define BYTE_MASK ((1 << BITS_PER_BYTE) - 1) 58 #define BITMAP_FIRST_BYTE_MASK(start) \ 59 ((BYTE_MASK << ((start) & (BITS_PER_BYTE - 1))) & BYTE_MASK) 60 #define BITMAP_LAST_BYTE_MASK(nbits) \ 61 (BYTE_MASK >> (-(nbits) & (BITS_PER_BYTE - 1))) 62 63 struct btrfs_root; 64 struct btrfs_inode; 65 struct btrfs_io_bio; 66 struct io_failure_record; 67 struct extent_io_tree; 68 69 typedef blk_status_t (extent_submit_bio_start_t)(void *private_data, 70 struct bio *bio, u64 bio_offset); 71 72 struct extent_io_ops { 73 /* 74 * The following callbacks must be always defined, the function 75 * pointer will be called unconditionally. 76 */ 77 blk_status_t (*submit_bio_hook)(struct inode *inode, struct bio *bio, 78 int mirror_num, unsigned long bio_flags); 79 int (*readpage_end_io_hook)(struct btrfs_io_bio *io_bio, u64 phy_offset, 80 struct page *page, u64 start, u64 end, 81 int mirror); 82 }; 83 84 85 #define INLINE_EXTENT_BUFFER_PAGES 16 86 #define MAX_INLINE_EXTENT_BUFFER_SIZE (INLINE_EXTENT_BUFFER_PAGES * PAGE_SIZE) 87 struct extent_buffer { 88 u64 start; 89 unsigned long len; 90 unsigned long bflags; 91 struct btrfs_fs_info *fs_info; 92 spinlock_t refs_lock; 93 atomic_t refs; 94 atomic_t io_pages; 95 int read_mirror; 96 struct rcu_head rcu_head; 97 pid_t lock_owner; 98 99 int blocking_writers; 100 atomic_t blocking_readers; 101 bool lock_nested; 102 /* >= 0 if eb belongs to a log tree, -1 otherwise */ 103 short log_index; 104 105 /* protects write locks */ 106 rwlock_t lock; 107 108 /* readers use lock_wq while they wait for the write 109 * lock holders to unlock 110 */ 111 wait_queue_head_t write_lock_wq; 112 113 /* writers use read_lock_wq while they wait for readers 114 * to unlock 115 */ 116 wait_queue_head_t read_lock_wq; 117 struct page *pages[INLINE_EXTENT_BUFFER_PAGES]; 118 #ifdef CONFIG_BTRFS_DEBUG 119 int spinning_writers; 120 atomic_t spinning_readers; 121 atomic_t read_locks; 122 int write_locks; 123 struct list_head leak_list; 124 #endif 125 }; 126 127 /* 128 * Structure to record how many bytes and which ranges are set/cleared 129 */ 130 struct extent_changeset { 131 /* How many bytes are set/cleared in this operation */ 132 unsigned int bytes_changed; 133 134 /* Changed ranges */ 135 struct ulist range_changed; 136 }; 137 138 static inline void extent_changeset_init(struct extent_changeset *changeset) 139 { 140 changeset->bytes_changed = 0; 141 ulist_init(&changeset->range_changed); 142 } 143 144 static inline struct extent_changeset *extent_changeset_alloc(void) 145 { 146 struct extent_changeset *ret; 147 148 ret = kmalloc(sizeof(*ret), GFP_KERNEL); 149 if (!ret) 150 return NULL; 151 152 extent_changeset_init(ret); 153 return ret; 154 } 155 156 static inline void extent_changeset_release(struct extent_changeset *changeset) 157 { 158 if (!changeset) 159 return; 160 changeset->bytes_changed = 0; 161 ulist_release(&changeset->range_changed); 162 } 163 164 static inline void extent_changeset_free(struct extent_changeset *changeset) 165 { 166 if (!changeset) 167 return; 168 extent_changeset_release(changeset); 169 kfree(changeset); 170 } 171 172 static inline void extent_set_compress_type(unsigned long *bio_flags, 173 int compress_type) 174 { 175 *bio_flags |= compress_type << EXTENT_BIO_FLAG_SHIFT; 176 } 177 178 static inline int extent_compress_type(unsigned long bio_flags) 179 { 180 return bio_flags >> EXTENT_BIO_FLAG_SHIFT; 181 } 182 183 struct extent_map_tree; 184 185 typedef struct extent_map *(get_extent_t)(struct btrfs_inode *inode, 186 struct page *page, 187 size_t pg_offset, 188 u64 start, u64 len, 189 int create); 190 191 int try_release_extent_mapping(struct page *page, gfp_t mask); 192 int try_release_extent_buffer(struct page *page); 193 194 int extent_read_full_page(struct extent_io_tree *tree, struct page *page, 195 get_extent_t *get_extent, int mirror_num); 196 int extent_write_full_page(struct page *page, struct writeback_control *wbc); 197 int extent_write_locked_range(struct inode *inode, u64 start, u64 end, 198 int mode); 199 int extent_writepages(struct address_space *mapping, 200 struct writeback_control *wbc); 201 int btree_write_cache_pages(struct address_space *mapping, 202 struct writeback_control *wbc); 203 int extent_readpages(struct address_space *mapping, struct list_head *pages, 204 unsigned nr_pages); 205 int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, 206 __u64 start, __u64 len); 207 void set_page_extent_mapped(struct page *page); 208 209 struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info, 210 u64 start); 211 struct extent_buffer *__alloc_dummy_extent_buffer(struct btrfs_fs_info *fs_info, 212 u64 start, unsigned long len); 213 struct extent_buffer *alloc_dummy_extent_buffer(struct btrfs_fs_info *fs_info, 214 u64 start); 215 struct extent_buffer *btrfs_clone_extent_buffer(struct extent_buffer *src); 216 struct extent_buffer *find_extent_buffer(struct btrfs_fs_info *fs_info, 217 u64 start); 218 void free_extent_buffer(struct extent_buffer *eb); 219 void free_extent_buffer_stale(struct extent_buffer *eb); 220 #define WAIT_NONE 0 221 #define WAIT_COMPLETE 1 222 #define WAIT_PAGE_LOCK 2 223 int read_extent_buffer_pages(struct extent_buffer *eb, int wait, 224 int mirror_num); 225 void wait_on_extent_buffer_writeback(struct extent_buffer *eb); 226 227 static inline int num_extent_pages(const struct extent_buffer *eb) 228 { 229 return (round_up(eb->start + eb->len, PAGE_SIZE) >> PAGE_SHIFT) - 230 (eb->start >> PAGE_SHIFT); 231 } 232 233 static inline int extent_buffer_uptodate(struct extent_buffer *eb) 234 { 235 return test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); 236 } 237 238 int memcmp_extent_buffer(const struct extent_buffer *eb, const void *ptrv, 239 unsigned long start, unsigned long len); 240 void read_extent_buffer(const struct extent_buffer *eb, void *dst, 241 unsigned long start, 242 unsigned long len); 243 int read_extent_buffer_to_user(const struct extent_buffer *eb, 244 void __user *dst, unsigned long start, 245 unsigned long len); 246 void write_extent_buffer_fsid(struct extent_buffer *eb, const void *src); 247 void write_extent_buffer_chunk_tree_uuid(struct extent_buffer *eb, 248 const void *src); 249 void write_extent_buffer(struct extent_buffer *eb, const void *src, 250 unsigned long start, unsigned long len); 251 void copy_extent_buffer_full(struct extent_buffer *dst, 252 struct extent_buffer *src); 253 void copy_extent_buffer(struct extent_buffer *dst, struct extent_buffer *src, 254 unsigned long dst_offset, unsigned long src_offset, 255 unsigned long len); 256 void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset, 257 unsigned long src_offset, unsigned long len); 258 void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset, 259 unsigned long src_offset, unsigned long len); 260 void memzero_extent_buffer(struct extent_buffer *eb, unsigned long start, 261 unsigned long len); 262 int extent_buffer_test_bit(struct extent_buffer *eb, unsigned long start, 263 unsigned long pos); 264 void extent_buffer_bitmap_set(struct extent_buffer *eb, unsigned long start, 265 unsigned long pos, unsigned long len); 266 void extent_buffer_bitmap_clear(struct extent_buffer *eb, unsigned long start, 267 unsigned long pos, unsigned long len); 268 void clear_extent_buffer_dirty(struct extent_buffer *eb); 269 bool set_extent_buffer_dirty(struct extent_buffer *eb); 270 void set_extent_buffer_uptodate(struct extent_buffer *eb); 271 void clear_extent_buffer_uptodate(struct extent_buffer *eb); 272 int extent_buffer_under_io(struct extent_buffer *eb); 273 int map_private_extent_buffer(const struct extent_buffer *eb, 274 unsigned long offset, unsigned long min_len, 275 char **map, unsigned long *map_start, 276 unsigned long *map_len); 277 void extent_range_clear_dirty_for_io(struct inode *inode, u64 start, u64 end); 278 void extent_range_redirty_for_io(struct inode *inode, u64 start, u64 end); 279 void extent_clear_unlock_delalloc(struct inode *inode, u64 start, u64 end, 280 struct page *locked_page, 281 unsigned bits_to_clear, 282 unsigned long page_ops); 283 struct bio *btrfs_bio_alloc(u64 first_byte); 284 struct bio *btrfs_io_bio_alloc(unsigned int nr_iovecs); 285 struct bio *btrfs_bio_clone(struct bio *bio); 286 struct bio *btrfs_bio_clone_partial(struct bio *orig, int offset, int size); 287 288 struct btrfs_fs_info; 289 struct btrfs_inode; 290 291 int repair_io_failure(struct btrfs_fs_info *fs_info, u64 ino, u64 start, 292 u64 length, u64 logical, struct page *page, 293 unsigned int pg_offset, int mirror_num); 294 void end_extent_writepage(struct page *page, int err, u64 start, u64 end); 295 int btrfs_repair_eb_io_failure(struct extent_buffer *eb, int mirror_num); 296 297 /* 298 * When IO fails, either with EIO or csum verification fails, we 299 * try other mirrors that might have a good copy of the data. This 300 * io_failure_record is used to record state as we go through all the 301 * mirrors. If another mirror has good data, the page is set up to date 302 * and things continue. If a good mirror can't be found, the original 303 * bio end_io callback is called to indicate things have failed. 304 */ 305 struct io_failure_record { 306 struct page *page; 307 u64 start; 308 u64 len; 309 u64 logical; 310 unsigned long bio_flags; 311 int this_mirror; 312 int failed_mirror; 313 int in_validation; 314 }; 315 316 317 bool btrfs_check_repairable(struct inode *inode, unsigned failed_bio_pages, 318 struct io_failure_record *failrec, int fail_mirror); 319 struct bio *btrfs_create_repair_bio(struct inode *inode, struct bio *failed_bio, 320 struct io_failure_record *failrec, 321 struct page *page, int pg_offset, int icsum, 322 bio_end_io_t *endio_func, void *data); 323 #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS 324 bool find_lock_delalloc_range(struct inode *inode, 325 struct page *locked_page, u64 *start, 326 u64 *end); 327 #endif 328 struct extent_buffer *alloc_test_extent_buffer(struct btrfs_fs_info *fs_info, 329 u64 start); 330 #endif 331