xref: /linux/fs/btrfs/extent_io.h (revision fd71def6d9abc5ae362fb9995d46049b7b0ed391)
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 <linux/fiemap.h>
9  #include <linux/btrfs_tree.h>
10  #include <linux/spinlock.h>
11  #include <linux/atomic.h>
12  #include <linux/rwsem.h>
13  #include <linux/list.h>
14  #include <linux/slab.h>
15  #include "compression.h"
16  #include "messages.h"
17  #include "ulist.h"
18  #include "misc.h"
19  
20  struct page;
21  struct file;
22  struct folio;
23  struct inode;
24  struct fiemap_extent_info;
25  struct readahead_control;
26  struct address_space;
27  struct writeback_control;
28  struct extent_io_tree;
29  struct extent_map_tree;
30  struct extent_state;
31  struct btrfs_block_group;
32  struct btrfs_fs_info;
33  struct btrfs_inode;
34  struct btrfs_root;
35  struct btrfs_trans_handle;
36  struct btrfs_tree_parent_check;
37  
38  enum {
39  	EXTENT_BUFFER_UPTODATE,
40  	EXTENT_BUFFER_DIRTY,
41  	EXTENT_BUFFER_CORRUPT,
42  	/* this got triggered by readahead */
43  	EXTENT_BUFFER_READAHEAD,
44  	EXTENT_BUFFER_TREE_REF,
45  	EXTENT_BUFFER_STALE,
46  	EXTENT_BUFFER_WRITEBACK,
47  	/* read IO error */
48  	EXTENT_BUFFER_READ_ERR,
49  	EXTENT_BUFFER_UNMAPPED,
50  	EXTENT_BUFFER_IN_TREE,
51  	/* write IO error */
52  	EXTENT_BUFFER_WRITE_ERR,
53  	/* Indicate the extent buffer is written zeroed out (for zoned) */
54  	EXTENT_BUFFER_ZONED_ZEROOUT,
55  	/* Indicate that extent buffer pages a being read */
56  	EXTENT_BUFFER_READING,
57  };
58  
59  /* these are flags for __process_pages_contig */
60  enum {
61  	ENUM_BIT(PAGE_UNLOCK),
62  	/* Page starts writeback, clear dirty bit and set writeback bit */
63  	ENUM_BIT(PAGE_START_WRITEBACK),
64  	ENUM_BIT(PAGE_END_WRITEBACK),
65  	ENUM_BIT(PAGE_SET_ORDERED),
66  };
67  
68  /*
69   * Folio private values.  Every page that is controlled by the extent map has
70   * folio private set to this value.
71   */
72  #define EXTENT_FOLIO_PRIVATE			1
73  
74  /*
75   * The extent buffer bitmap operations are done with byte granularity instead of
76   * word granularity for two reasons:
77   * 1. The bitmaps must be little-endian on disk.
78   * 2. Bitmap items are not guaranteed to be aligned to a word and therefore a
79   *    single word in a bitmap may straddle two pages in the extent buffer.
80   */
81  #define BIT_BYTE(nr) ((nr) / BITS_PER_BYTE)
82  #define BYTE_MASK ((1 << BITS_PER_BYTE) - 1)
83  #define BITMAP_FIRST_BYTE_MASK(start) \
84  	((BYTE_MASK << ((start) & (BITS_PER_BYTE - 1))) & BYTE_MASK)
85  #define BITMAP_LAST_BYTE_MASK(nbits) \
86  	(BYTE_MASK >> (-(nbits) & (BITS_PER_BYTE - 1)))
87  
88  
89  int __init extent_buffer_init_cachep(void);
90  void __cold extent_buffer_free_cachep(void);
91  
92  #define INLINE_EXTENT_BUFFER_PAGES     (BTRFS_MAX_METADATA_BLOCKSIZE / PAGE_SIZE)
93  struct extent_buffer {
94  	u64 start;
95  	u32 len;
96  	u32 folio_size;
97  	unsigned long bflags;
98  	struct btrfs_fs_info *fs_info;
99  
100  	/*
101  	 * The address where the eb can be accessed without any cross-page handling.
102  	 * This can be NULL if not possible.
103  	 */
104  	void *addr;
105  
106  	spinlock_t refs_lock;
107  	atomic_t refs;
108  	int read_mirror;
109  	/* >= 0 if eb belongs to a log tree, -1 otherwise */
110  	s8 log_index;
111  	u8 folio_shift;
112  	struct rcu_head rcu_head;
113  
114  	struct rw_semaphore lock;
115  
116  	/*
117  	 * Pointers to all the folios of the extent buffer.
118  	 *
119  	 * For now the folio is always order 0 (aka, a single page).
120  	 */
121  	struct folio *folios[INLINE_EXTENT_BUFFER_PAGES];
122  #ifdef CONFIG_BTRFS_DEBUG
123  	struct list_head leak_list;
124  	pid_t lock_owner;
125  #endif
126  };
127  
128  struct btrfs_eb_write_context {
129  	struct writeback_control *wbc;
130  	struct extent_buffer *eb;
131  	/* Block group @eb resides in. Only used for zoned mode. */
132  	struct btrfs_block_group *zoned_bg;
133  };
134  
offset_in_eb_folio(const struct extent_buffer * eb,u64 start)135  static inline unsigned long offset_in_eb_folio(const struct extent_buffer *eb,
136  					       u64 start)
137  {
138  	ASSERT(eb->folio_size);
139  	return start & (eb->folio_size - 1);
140  }
141  
142  /*
143   * Get the correct offset inside the page of extent buffer.
144   *
145   * @eb:		target extent buffer
146   * @start:	offset inside the extent buffer
147   *
148   * Will handle both sectorsize == PAGE_SIZE and sectorsize < PAGE_SIZE cases.
149   */
get_eb_offset_in_folio(const struct extent_buffer * eb,unsigned long offset)150  static inline size_t get_eb_offset_in_folio(const struct extent_buffer *eb,
151  					    unsigned long offset)
152  {
153  	/*
154  	 * 1) sectorsize == PAGE_SIZE and nodesize >= PAGE_SIZE case
155  	 *    1.1) One large folio covering the whole eb
156  	 *	   The eb->start is aligned to folio size, thus adding it
157  	 *	   won't cause any difference.
158  	 *    1.2) Several page sized folios
159  	 *	   The eb->start is aligned to folio (page) size, thus
160  	 *	   adding it won't cause any difference.
161  	 *
162  	 * 2) sectorsize < PAGE_SIZE and nodesize < PAGE_SIZE case
163  	 *    In this case there would only be one page sized folio, and there
164  	 *    may be several different extent buffers in the page/folio.
165  	 *    We need to add eb->start to properly access the offset inside
166  	 *    that eb.
167  	 */
168  	return offset_in_folio(eb->folios[0], offset + eb->start);
169  }
170  
get_eb_folio_index(const struct extent_buffer * eb,unsigned long offset)171  static inline unsigned long get_eb_folio_index(const struct extent_buffer *eb,
172  					       unsigned long offset)
173  {
174  	/*
175  	 * 1) sectorsize == PAGE_SIZE and nodesize >= PAGE_SIZE case
176  	 *    1.1) One large folio covering the whole eb.
177  	 *	   the folio_shift would be large enough to always make us
178  	 *	   return 0 as index.
179  	 *    1.2) Several page sized folios
180  	 *         The folio_shift would be PAGE_SHIFT, giving us the correct
181  	 *         index.
182  	 *
183  	 * 2) sectorsize < PAGE_SIZE and nodesize < PAGE_SIZE case
184  	 *    The folio would only be page sized, and always give us 0 as index.
185  	 */
186  	return offset >> eb->folio_shift;
187  }
188  
189  /*
190   * Structure to record how many bytes and which ranges are set/cleared
191   */
192  struct extent_changeset {
193  	/* How many bytes are set/cleared in this operation */
194  	u64 bytes_changed;
195  
196  	/* Changed ranges */
197  	struct ulist range_changed;
198  };
199  
extent_changeset_init(struct extent_changeset * changeset)200  static inline void extent_changeset_init(struct extent_changeset *changeset)
201  {
202  	changeset->bytes_changed = 0;
203  	ulist_init(&changeset->range_changed);
204  }
205  
extent_changeset_alloc(void)206  static inline struct extent_changeset *extent_changeset_alloc(void)
207  {
208  	struct extent_changeset *ret;
209  
210  	ret = kmalloc(sizeof(*ret), GFP_KERNEL);
211  	if (!ret)
212  		return NULL;
213  
214  	extent_changeset_init(ret);
215  	return ret;
216  }
217  
extent_changeset_prealloc(struct extent_changeset * changeset,gfp_t gfp_mask)218  static inline void extent_changeset_prealloc(struct extent_changeset *changeset, gfp_t gfp_mask)
219  {
220  	ulist_prealloc(&changeset->range_changed, gfp_mask);
221  }
222  
extent_changeset_release(struct extent_changeset * changeset)223  static inline void extent_changeset_release(struct extent_changeset *changeset)
224  {
225  	if (!changeset)
226  		return;
227  	changeset->bytes_changed = 0;
228  	ulist_release(&changeset->range_changed);
229  }
230  
extent_changeset_free(struct extent_changeset * changeset)231  static inline void extent_changeset_free(struct extent_changeset *changeset)
232  {
233  	if (!changeset)
234  		return;
235  	extent_changeset_release(changeset);
236  	kfree(changeset);
237  }
238  
239  bool try_release_extent_mapping(struct folio *folio, gfp_t mask);
240  int try_release_extent_buffer(struct folio *folio);
241  
242  int btrfs_read_folio(struct file *file, struct folio *folio);
243  void extent_write_locked_range(struct inode *inode, const struct folio *locked_folio,
244  			       u64 start, u64 end, struct writeback_control *wbc,
245  			       bool pages_dirty);
246  int btrfs_writepages(struct address_space *mapping, struct writeback_control *wbc);
247  int btree_write_cache_pages(struct address_space *mapping,
248  			    struct writeback_control *wbc);
249  void btrfs_readahead(struct readahead_control *rac);
250  int set_folio_extent_mapped(struct folio *folio);
251  void clear_folio_extent_mapped(struct folio *folio);
252  
253  struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
254  					  u64 start, u64 owner_root, int level);
255  struct extent_buffer *alloc_dummy_extent_buffer(struct btrfs_fs_info *fs_info,
256  						u64 start);
257  struct extent_buffer *btrfs_clone_extent_buffer(const struct extent_buffer *src);
258  struct extent_buffer *find_extent_buffer(struct btrfs_fs_info *fs_info,
259  					 u64 start);
260  void free_extent_buffer(struct extent_buffer *eb);
261  void free_extent_buffer_stale(struct extent_buffer *eb);
262  int read_extent_buffer_pages(struct extent_buffer *eb, int mirror_num,
263  			     const struct btrfs_tree_parent_check *parent_check);
264  int read_extent_buffer_pages_nowait(struct extent_buffer *eb, int mirror_num,
265  				    const struct btrfs_tree_parent_check *parent_check);
266  
wait_on_extent_buffer_writeback(struct extent_buffer * eb)267  static inline void wait_on_extent_buffer_writeback(struct extent_buffer *eb)
268  {
269  	wait_on_bit_io(&eb->bflags, EXTENT_BUFFER_WRITEBACK,
270  		       TASK_UNINTERRUPTIBLE);
271  }
272  
273  void btrfs_readahead_tree_block(struct btrfs_fs_info *fs_info,
274  				u64 bytenr, u64 owner_root, u64 gen, int level);
275  void btrfs_readahead_node_child(struct extent_buffer *node, int slot);
276  
277  /* Note: this can be used in for loops without caching the value in a variable. */
num_extent_pages(const struct extent_buffer * eb)278  static inline int __pure num_extent_pages(const struct extent_buffer *eb)
279  {
280  	/*
281  	 * For sectorsize == PAGE_SIZE case, since nodesize is always aligned to
282  	 * sectorsize, it's just eb->len >> PAGE_SHIFT.
283  	 *
284  	 * For sectorsize < PAGE_SIZE case, we could have nodesize < PAGE_SIZE,
285  	 * thus have to ensure we get at least one page.
286  	 */
287  	return (eb->len >> PAGE_SHIFT) ?: 1;
288  }
289  
290  /*
291   * This can only be determined at runtime by checking eb::folios[0].
292   *
293   * As we can have either one large folio covering the whole eb
294   * (either nodesize <= PAGE_SIZE, or high order folio), or multiple
295   * single-paged folios.
296   *
297   * Note: this can be used in for loops without caching the value in a variable.
298   */
num_extent_folios(const struct extent_buffer * eb)299  static inline int __pure num_extent_folios(const struct extent_buffer *eb)
300  {
301  	if (folio_order(eb->folios[0]))
302  		return 1;
303  	return num_extent_pages(eb);
304  }
305  
extent_buffer_uptodate(const struct extent_buffer * eb)306  static inline int extent_buffer_uptodate(const struct extent_buffer *eb)
307  {
308  	return test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags);
309  }
310  
311  int memcmp_extent_buffer(const struct extent_buffer *eb, const void *ptrv,
312  			 unsigned long start, unsigned long len);
313  void read_extent_buffer(const struct extent_buffer *eb, void *dst,
314  			unsigned long start,
315  			unsigned long len);
316  int read_extent_buffer_to_user_nofault(const struct extent_buffer *eb,
317  				       void __user *dst, unsigned long start,
318  				       unsigned long len);
319  void write_extent_buffer(const struct extent_buffer *eb, const void *src,
320  			 unsigned long start, unsigned long len);
321  
write_extent_buffer_chunk_tree_uuid(const struct extent_buffer * eb,const void * chunk_tree_uuid)322  static inline void write_extent_buffer_chunk_tree_uuid(
323  		const struct extent_buffer *eb, const void *chunk_tree_uuid)
324  {
325  	write_extent_buffer(eb, chunk_tree_uuid,
326  			    offsetof(struct btrfs_header, chunk_tree_uuid),
327  			    BTRFS_FSID_SIZE);
328  }
329  
write_extent_buffer_fsid(const struct extent_buffer * eb,const void * fsid)330  static inline void write_extent_buffer_fsid(const struct extent_buffer *eb,
331  					    const void *fsid)
332  {
333  	write_extent_buffer(eb, fsid, offsetof(struct btrfs_header, fsid),
334  			    BTRFS_FSID_SIZE);
335  }
336  
337  void copy_extent_buffer_full(const struct extent_buffer *dst,
338  			     const struct extent_buffer *src);
339  void copy_extent_buffer(const struct extent_buffer *dst,
340  			const struct extent_buffer *src,
341  			unsigned long dst_offset, unsigned long src_offset,
342  			unsigned long len);
343  void memcpy_extent_buffer(const struct extent_buffer *dst,
344  			  unsigned long dst_offset, unsigned long src_offset,
345  			  unsigned long len);
346  void memmove_extent_buffer(const struct extent_buffer *dst,
347  			   unsigned long dst_offset, unsigned long src_offset,
348  			   unsigned long len);
349  void memzero_extent_buffer(const struct extent_buffer *eb, unsigned long start,
350  			   unsigned long len);
351  int extent_buffer_test_bit(const struct extent_buffer *eb, unsigned long start,
352  			   unsigned long pos);
353  void extent_buffer_bitmap_set(const struct extent_buffer *eb, unsigned long start,
354  			      unsigned long pos, unsigned long len);
355  void extent_buffer_bitmap_clear(const struct extent_buffer *eb,
356  				unsigned long start, unsigned long pos,
357  				unsigned long len);
358  void set_extent_buffer_dirty(struct extent_buffer *eb);
359  void set_extent_buffer_uptodate(struct extent_buffer *eb);
360  void clear_extent_buffer_uptodate(struct extent_buffer *eb);
361  void extent_clear_unlock_delalloc(struct btrfs_inode *inode, u64 start, u64 end,
362  				  const struct folio *locked_folio,
363  				  struct extent_state **cached,
364  				  u32 bits_to_clear, unsigned long page_ops);
365  int extent_invalidate_folio(struct extent_io_tree *tree,
366  			    struct folio *folio, size_t offset);
367  void btrfs_clear_buffer_dirty(struct btrfs_trans_handle *trans,
368  			      struct extent_buffer *buf);
369  
370  int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array,
371  			   bool nofail);
372  int btrfs_alloc_folio_array(unsigned int nr_folios, struct folio **folio_array);
373  
374  #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
375  bool find_lock_delalloc_range(struct inode *inode,
376  			      struct folio *locked_folio, u64 *start,
377  			     u64 *end);
378  #endif
379  struct extent_buffer *alloc_test_extent_buffer(struct btrfs_fs_info *fs_info,
380  					       u64 start);
381  
382  #ifdef CONFIG_BTRFS_DEBUG
383  void btrfs_extent_buffer_leak_debug_check(struct btrfs_fs_info *fs_info);
384  #else
385  #define btrfs_extent_buffer_leak_debug_check(fs_info)	do {} while (0)
386  #endif
387  
388  #endif
389