xref: /openbmc/linux/include/linux/buffer_head.h (revision 060f35a317ef09101b128f399dce7ed13d019461)
1  /* SPDX-License-Identifier: GPL-2.0 */
2  /*
3   * include/linux/buffer_head.h
4   *
5   * Everything to do with buffer_heads.
6   */
7  
8  #ifndef _LINUX_BUFFER_HEAD_H
9  #define _LINUX_BUFFER_HEAD_H
10  
11  #include <linux/types.h>
12  #include <linux/blk_types.h>
13  #include <linux/fs.h>
14  #include <linux/linkage.h>
15  #include <linux/pagemap.h>
16  #include <linux/wait.h>
17  #include <linux/atomic.h>
18  
19  enum bh_state_bits {
20  	BH_Uptodate,	/* Contains valid data */
21  	BH_Dirty,	/* Is dirty */
22  	BH_Lock,	/* Is locked */
23  	BH_Req,		/* Has been submitted for I/O */
24  
25  	BH_Mapped,	/* Has a disk mapping */
26  	BH_New,		/* Disk mapping was newly created by get_block */
27  	BH_Async_Read,	/* Is under end_buffer_async_read I/O */
28  	BH_Async_Write,	/* Is under end_buffer_async_write I/O */
29  	BH_Delay,	/* Buffer is not yet allocated on disk */
30  	BH_Boundary,	/* Block is followed by a discontiguity */
31  	BH_Write_EIO,	/* I/O error on write */
32  	BH_Unwritten,	/* Buffer is allocated on disk but not written */
33  	BH_Quiet,	/* Buffer Error Prinks to be quiet */
34  	BH_Meta,	/* Buffer contains metadata */
35  	BH_Prio,	/* Buffer should be submitted with REQ_PRIO */
36  	BH_Defer_Completion, /* Defer AIO completion to workqueue */
37  
38  	BH_PrivateStart,/* not a state bit, but the first bit available
39  			 * for private allocation by other entities
40  			 */
41  };
42  
43  #define MAX_BUF_PER_PAGE (PAGE_SIZE / 512)
44  
45  struct page;
46  struct buffer_head;
47  struct address_space;
48  typedef void (bh_end_io_t)(struct buffer_head *bh, int uptodate);
49  
50  /*
51   * Historically, a buffer_head was used to map a single block
52   * within a page, and of course as the unit of I/O through the
53   * filesystem and block layers.  Nowadays the basic I/O unit
54   * is the bio, and buffer_heads are used for extracting block
55   * mappings (via a get_block_t call), for tracking state within
56   * a page (via a page_mapping) and for wrapping bio submission
57   * for backward compatibility reasons (e.g. submit_bh).
58   */
59  struct buffer_head {
60  	unsigned long b_state;		/* buffer state bitmap (see above) */
61  	struct buffer_head *b_this_page;/* circular list of page's buffers */
62  	union {
63  		struct page *b_page;	/* the page this bh is mapped to */
64  		struct folio *b_folio;	/* the folio this bh is mapped to */
65  	};
66  
67  	sector_t b_blocknr;		/* start block number */
68  	size_t b_size;			/* size of mapping */
69  	char *b_data;			/* pointer to data within the page */
70  
71  	struct block_device *b_bdev;
72  	bh_end_io_t *b_end_io;		/* I/O completion */
73   	void *b_private;		/* reserved for b_end_io */
74  	struct list_head b_assoc_buffers; /* associated with another mapping */
75  	struct address_space *b_assoc_map;	/* mapping this buffer is
76  						   associated with */
77  	atomic_t b_count;		/* users using this buffer_head */
78  	spinlock_t b_uptodate_lock;	/* Used by the first bh in a page, to
79  					 * serialise IO completion of other
80  					 * buffers in the page */
81  };
82  
83  /*
84   * macro tricks to expand the set_buffer_foo(), clear_buffer_foo()
85   * and buffer_foo() functions.
86   * To avoid reset buffer flags that are already set, because that causes
87   * a costly cache line transition, check the flag first.
88   */
89  #define BUFFER_FNS(bit, name)						\
90  static __always_inline void set_buffer_##name(struct buffer_head *bh)	\
91  {									\
92  	if (!test_bit(BH_##bit, &(bh)->b_state))			\
93  		set_bit(BH_##bit, &(bh)->b_state);			\
94  }									\
95  static __always_inline void clear_buffer_##name(struct buffer_head *bh)	\
96  {									\
97  	clear_bit(BH_##bit, &(bh)->b_state);				\
98  }									\
99  static __always_inline int buffer_##name(const struct buffer_head *bh)	\
100  {									\
101  	return test_bit(BH_##bit, &(bh)->b_state);			\
102  }
103  
104  /*
105   * test_set_buffer_foo() and test_clear_buffer_foo()
106   */
107  #define TAS_BUFFER_FNS(bit, name)					\
108  static __always_inline int test_set_buffer_##name(struct buffer_head *bh) \
109  {									\
110  	return test_and_set_bit(BH_##bit, &(bh)->b_state);		\
111  }									\
112  static __always_inline int test_clear_buffer_##name(struct buffer_head *bh) \
113  {									\
114  	return test_and_clear_bit(BH_##bit, &(bh)->b_state);		\
115  }									\
116  
117  /*
118   * Emit the buffer bitops functions.   Note that there are also functions
119   * of the form "mark_buffer_foo()".  These are higher-level functions which
120   * do something in addition to setting a b_state bit.
121   */
BUFFER_FNS(Dirty,dirty)122  BUFFER_FNS(Dirty, dirty)
123  TAS_BUFFER_FNS(Dirty, dirty)
124  BUFFER_FNS(Lock, locked)
125  BUFFER_FNS(Req, req)
126  TAS_BUFFER_FNS(Req, req)
127  BUFFER_FNS(Mapped, mapped)
128  BUFFER_FNS(New, new)
129  BUFFER_FNS(Async_Read, async_read)
130  BUFFER_FNS(Async_Write, async_write)
131  BUFFER_FNS(Delay, delay)
132  BUFFER_FNS(Boundary, boundary)
133  BUFFER_FNS(Write_EIO, write_io_error)
134  BUFFER_FNS(Unwritten, unwritten)
135  BUFFER_FNS(Meta, meta)
136  BUFFER_FNS(Prio, prio)
137  BUFFER_FNS(Defer_Completion, defer_completion)
138  
139  static __always_inline void set_buffer_uptodate(struct buffer_head *bh)
140  {
141  	/*
142  	 * If somebody else already set this uptodate, they will
143  	 * have done the memory barrier, and a reader will thus
144  	 * see *some* valid buffer state.
145  	 *
146  	 * Any other serialization (with IO errors or whatever that
147  	 * might clear the bit) has to come from other state (eg BH_Lock).
148  	 */
149  	if (test_bit(BH_Uptodate, &bh->b_state))
150  		return;
151  
152  	/*
153  	 * make it consistent with folio_mark_uptodate
154  	 * pairs with smp_load_acquire in buffer_uptodate
155  	 */
156  	smp_mb__before_atomic();
157  	set_bit(BH_Uptodate, &bh->b_state);
158  }
159  
clear_buffer_uptodate(struct buffer_head * bh)160  static __always_inline void clear_buffer_uptodate(struct buffer_head *bh)
161  {
162  	clear_bit(BH_Uptodate, &bh->b_state);
163  }
164  
buffer_uptodate(const struct buffer_head * bh)165  static __always_inline int buffer_uptodate(const struct buffer_head *bh)
166  {
167  	/*
168  	 * make it consistent with folio_test_uptodate
169  	 * pairs with smp_mb__before_atomic in set_buffer_uptodate
170  	 */
171  	return test_bit_acquire(BH_Uptodate, &bh->b_state);
172  }
173  
bh_offset(const struct buffer_head * bh)174  static inline unsigned long bh_offset(const struct buffer_head *bh)
175  {
176  	return (unsigned long)(bh)->b_data & (page_size(bh->b_page) - 1);
177  }
178  
179  /* If we *know* page->private refers to buffer_heads */
180  #define page_buffers(page)					\
181  	({							\
182  		BUG_ON(!PagePrivate(page));			\
183  		((struct buffer_head *)page_private(page));	\
184  	})
185  #define page_has_buffers(page)	PagePrivate(page)
186  #define folio_buffers(folio)		folio_get_private(folio)
187  
188  void buffer_check_dirty_writeback(struct folio *folio,
189  				     bool *dirty, bool *writeback);
190  
191  /*
192   * Declarations
193   */
194  
195  void mark_buffer_dirty(struct buffer_head *bh);
196  void mark_buffer_write_io_error(struct buffer_head *bh);
197  void touch_buffer(struct buffer_head *bh);
198  void folio_set_bh(struct buffer_head *bh, struct folio *folio,
199  		  unsigned long offset);
200  struct buffer_head *folio_alloc_buffers(struct folio *folio, unsigned long size,
201  					bool retry);
202  struct buffer_head *alloc_page_buffers(struct page *page, unsigned long size,
203  		bool retry);
204  void create_empty_buffers(struct page *, unsigned long,
205  			unsigned long b_state);
206  struct buffer_head *folio_create_empty_buffers(struct folio *folio,
207  		unsigned long blocksize, unsigned long b_state);
208  void end_buffer_read_sync(struct buffer_head *bh, int uptodate);
209  void end_buffer_write_sync(struct buffer_head *bh, int uptodate);
210  void end_buffer_async_write(struct buffer_head *bh, int uptodate);
211  
212  /* Things to do with buffers at mapping->private_list */
213  void mark_buffer_dirty_inode(struct buffer_head *bh, struct inode *inode);
214  int generic_buffers_fsync_noflush(struct file *file, loff_t start, loff_t end,
215  				  bool datasync);
216  int generic_buffers_fsync(struct file *file, loff_t start, loff_t end,
217  			  bool datasync);
218  void clean_bdev_aliases(struct block_device *bdev, sector_t block,
219  			sector_t len);
clean_bdev_bh_alias(struct buffer_head * bh)220  static inline void clean_bdev_bh_alias(struct buffer_head *bh)
221  {
222  	clean_bdev_aliases(bh->b_bdev, bh->b_blocknr, 1);
223  }
224  
225  void mark_buffer_async_write(struct buffer_head *bh);
226  void __wait_on_buffer(struct buffer_head *);
227  wait_queue_head_t *bh_waitq_head(struct buffer_head *bh);
228  struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block,
229  			unsigned size);
230  struct buffer_head *__getblk_gfp(struct block_device *bdev, sector_t block,
231  				  unsigned size, gfp_t gfp);
232  void __brelse(struct buffer_head *);
233  void __bforget(struct buffer_head *);
234  void __breadahead(struct block_device *, sector_t block, unsigned int size);
235  struct buffer_head *__bread_gfp(struct block_device *,
236  				sector_t block, unsigned size, gfp_t gfp);
237  struct buffer_head *alloc_buffer_head(gfp_t gfp_flags);
238  void free_buffer_head(struct buffer_head * bh);
239  void unlock_buffer(struct buffer_head *bh);
240  void __lock_buffer(struct buffer_head *bh);
241  int sync_dirty_buffer(struct buffer_head *bh);
242  int __sync_dirty_buffer(struct buffer_head *bh, blk_opf_t op_flags);
243  void write_dirty_buffer(struct buffer_head *bh, blk_opf_t op_flags);
244  void submit_bh(blk_opf_t, struct buffer_head *);
245  void write_boundary_block(struct block_device *bdev,
246  			sector_t bblock, unsigned blocksize);
247  int bh_uptodate_or_lock(struct buffer_head *bh);
248  int __bh_read(struct buffer_head *bh, blk_opf_t op_flags, bool wait);
249  void __bh_read_batch(int nr, struct buffer_head *bhs[],
250  		     blk_opf_t op_flags, bool force_lock);
251  
252  /*
253   * Generic address_space_operations implementations for buffer_head-backed
254   * address_spaces.
255   */
256  void block_invalidate_folio(struct folio *folio, size_t offset, size_t length);
257  int block_write_full_page(struct page *page, get_block_t *get_block,
258  				struct writeback_control *wbc);
259  int __block_write_full_folio(struct inode *inode, struct folio *folio,
260  			get_block_t *get_block, struct writeback_control *wbc,
261  			bh_end_io_t *handler);
262  int block_read_full_folio(struct folio *, get_block_t *);
263  bool block_is_partially_uptodate(struct folio *, size_t from, size_t count);
264  int block_write_begin(struct address_space *mapping, loff_t pos, unsigned len,
265  		struct page **pagep, get_block_t *get_block);
266  int __block_write_begin(struct page *page, loff_t pos, unsigned len,
267  		get_block_t *get_block);
268  int block_write_end(struct file *, struct address_space *,
269  				loff_t, unsigned, unsigned,
270  				struct page *, void *);
271  int generic_write_end(struct file *, struct address_space *,
272  				loff_t, unsigned, unsigned,
273  				struct page *, void *);
274  void folio_zero_new_buffers(struct folio *folio, size_t from, size_t to);
275  void clean_page_buffers(struct page *page);
276  int cont_write_begin(struct file *, struct address_space *, loff_t,
277  			unsigned, struct page **, void **,
278  			get_block_t *, loff_t *);
279  int generic_cont_expand_simple(struct inode *inode, loff_t size);
280  void block_commit_write(struct page *page, unsigned int from, unsigned int to);
281  int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,
282  				get_block_t get_block);
283  sector_t generic_block_bmap(struct address_space *, sector_t, get_block_t *);
284  int block_truncate_page(struct address_space *, loff_t, get_block_t *);
285  
286  #ifdef CONFIG_MIGRATION
287  extern int buffer_migrate_folio(struct address_space *,
288  		struct folio *dst, struct folio *src, enum migrate_mode);
289  extern int buffer_migrate_folio_norefs(struct address_space *,
290  		struct folio *dst, struct folio *src, enum migrate_mode);
291  #else
292  #define buffer_migrate_folio NULL
293  #define buffer_migrate_folio_norefs NULL
294  #endif
295  
296  /*
297   * inline definitions
298   */
299  
get_bh(struct buffer_head * bh)300  static inline void get_bh(struct buffer_head *bh)
301  {
302          atomic_inc(&bh->b_count);
303  }
304  
put_bh(struct buffer_head * bh)305  static inline void put_bh(struct buffer_head *bh)
306  {
307          smp_mb__before_atomic();
308          atomic_dec(&bh->b_count);
309  }
310  
brelse(struct buffer_head * bh)311  static inline void brelse(struct buffer_head *bh)
312  {
313  	if (bh)
314  		__brelse(bh);
315  }
316  
bforget(struct buffer_head * bh)317  static inline void bforget(struct buffer_head *bh)
318  {
319  	if (bh)
320  		__bforget(bh);
321  }
322  
323  static inline struct buffer_head *
sb_bread(struct super_block * sb,sector_t block)324  sb_bread(struct super_block *sb, sector_t block)
325  {
326  	return __bread_gfp(sb->s_bdev, block, sb->s_blocksize, __GFP_MOVABLE);
327  }
328  
329  static inline struct buffer_head *
sb_bread_unmovable(struct super_block * sb,sector_t block)330  sb_bread_unmovable(struct super_block *sb, sector_t block)
331  {
332  	return __bread_gfp(sb->s_bdev, block, sb->s_blocksize, 0);
333  }
334  
335  static inline void
sb_breadahead(struct super_block * sb,sector_t block)336  sb_breadahead(struct super_block *sb, sector_t block)
337  {
338  	__breadahead(sb->s_bdev, block, sb->s_blocksize);
339  }
340  
341  static inline struct buffer_head *
sb_getblk(struct super_block * sb,sector_t block)342  sb_getblk(struct super_block *sb, sector_t block)
343  {
344  	return __getblk_gfp(sb->s_bdev, block, sb->s_blocksize, __GFP_MOVABLE);
345  }
346  
347  
348  static inline struct buffer_head *
sb_getblk_gfp(struct super_block * sb,sector_t block,gfp_t gfp)349  sb_getblk_gfp(struct super_block *sb, sector_t block, gfp_t gfp)
350  {
351  	return __getblk_gfp(sb->s_bdev, block, sb->s_blocksize, gfp);
352  }
353  
354  static inline struct buffer_head *
sb_find_get_block(struct super_block * sb,sector_t block)355  sb_find_get_block(struct super_block *sb, sector_t block)
356  {
357  	return __find_get_block(sb->s_bdev, block, sb->s_blocksize);
358  }
359  
360  static inline void
map_bh(struct buffer_head * bh,struct super_block * sb,sector_t block)361  map_bh(struct buffer_head *bh, struct super_block *sb, sector_t block)
362  {
363  	set_buffer_mapped(bh);
364  	bh->b_bdev = sb->s_bdev;
365  	bh->b_blocknr = block;
366  	bh->b_size = sb->s_blocksize;
367  }
368  
wait_on_buffer(struct buffer_head * bh)369  static inline void wait_on_buffer(struct buffer_head *bh)
370  {
371  	might_sleep();
372  	if (buffer_locked(bh))
373  		__wait_on_buffer(bh);
374  }
375  
trylock_buffer(struct buffer_head * bh)376  static inline int trylock_buffer(struct buffer_head *bh)
377  {
378  	return likely(!test_and_set_bit_lock(BH_Lock, &bh->b_state));
379  }
380  
lock_buffer(struct buffer_head * bh)381  static inline void lock_buffer(struct buffer_head *bh)
382  {
383  	might_sleep();
384  	if (!trylock_buffer(bh))
385  		__lock_buffer(bh);
386  }
387  
getblk_unmovable(struct block_device * bdev,sector_t block,unsigned size)388  static inline struct buffer_head *getblk_unmovable(struct block_device *bdev,
389  						   sector_t block,
390  						   unsigned size)
391  {
392  	return __getblk_gfp(bdev, block, size, 0);
393  }
394  
__getblk(struct block_device * bdev,sector_t block,unsigned size)395  static inline struct buffer_head *__getblk(struct block_device *bdev,
396  					   sector_t block,
397  					   unsigned size)
398  {
399  	return __getblk_gfp(bdev, block, size, __GFP_MOVABLE);
400  }
401  
bh_readahead(struct buffer_head * bh,blk_opf_t op_flags)402  static inline void bh_readahead(struct buffer_head *bh, blk_opf_t op_flags)
403  {
404  	if (!buffer_uptodate(bh) && trylock_buffer(bh)) {
405  		if (!buffer_uptodate(bh))
406  			__bh_read(bh, op_flags, false);
407  		else
408  			unlock_buffer(bh);
409  	}
410  }
411  
bh_read_nowait(struct buffer_head * bh,blk_opf_t op_flags)412  static inline void bh_read_nowait(struct buffer_head *bh, blk_opf_t op_flags)
413  {
414  	if (!bh_uptodate_or_lock(bh))
415  		__bh_read(bh, op_flags, false);
416  }
417  
418  /* Returns 1 if buffer uptodated, 0 on success, and -EIO on error. */
bh_read(struct buffer_head * bh,blk_opf_t op_flags)419  static inline int bh_read(struct buffer_head *bh, blk_opf_t op_flags)
420  {
421  	if (bh_uptodate_or_lock(bh))
422  		return 1;
423  	return __bh_read(bh, op_flags, true);
424  }
425  
bh_read_batch(int nr,struct buffer_head * bhs[])426  static inline void bh_read_batch(int nr, struct buffer_head *bhs[])
427  {
428  	__bh_read_batch(nr, bhs, 0, true);
429  }
430  
bh_readahead_batch(int nr,struct buffer_head * bhs[],blk_opf_t op_flags)431  static inline void bh_readahead_batch(int nr, struct buffer_head *bhs[],
432  				      blk_opf_t op_flags)
433  {
434  	__bh_read_batch(nr, bhs, op_flags, false);
435  }
436  
437  /**
438   *  __bread() - reads a specified block and returns the bh
439   *  @bdev: the block_device to read from
440   *  @block: number of block
441   *  @size: size (in bytes) to read
442   *
443   *  Reads a specified block, and returns buffer head that contains it.
444   *  The page cache is allocated from movable area so that it can be migrated.
445   *  It returns NULL if the block was unreadable.
446   */
447  static inline struct buffer_head *
__bread(struct block_device * bdev,sector_t block,unsigned size)448  __bread(struct block_device *bdev, sector_t block, unsigned size)
449  {
450  	return __bread_gfp(bdev, block, size, __GFP_MOVABLE);
451  }
452  
453  bool block_dirty_folio(struct address_space *mapping, struct folio *folio);
454  
455  #ifdef CONFIG_BUFFER_HEAD
456  
457  void buffer_init(void);
458  bool try_to_free_buffers(struct folio *folio);
459  int inode_has_buffers(struct inode *inode);
460  void invalidate_inode_buffers(struct inode *inode);
461  int remove_inode_buffers(struct inode *inode);
462  int sync_mapping_buffers(struct address_space *mapping);
463  void invalidate_bh_lrus(void);
464  void invalidate_bh_lrus_cpu(void);
465  bool has_bh_in_lru(int cpu, void *dummy);
466  extern int buffer_heads_over_limit;
467  
468  #else /* CONFIG_BUFFER_HEAD */
469  
buffer_init(void)470  static inline void buffer_init(void) {}
try_to_free_buffers(struct folio * folio)471  static inline bool try_to_free_buffers(struct folio *folio) { return true; }
inode_has_buffers(struct inode * inode)472  static inline int inode_has_buffers(struct inode *inode) { return 0; }
invalidate_inode_buffers(struct inode * inode)473  static inline void invalidate_inode_buffers(struct inode *inode) {}
remove_inode_buffers(struct inode * inode)474  static inline int remove_inode_buffers(struct inode *inode) { return 1; }
sync_mapping_buffers(struct address_space * mapping)475  static inline int sync_mapping_buffers(struct address_space *mapping) { return 0; }
invalidate_bh_lrus(void)476  static inline void invalidate_bh_lrus(void) {}
invalidate_bh_lrus_cpu(void)477  static inline void invalidate_bh_lrus_cpu(void) {}
has_bh_in_lru(int cpu,void * dummy)478  static inline bool has_bh_in_lru(int cpu, void *dummy) { return false; }
479  #define buffer_heads_over_limit 0
480  
481  #endif /* CONFIG_BUFFER_HEAD */
482  #endif /* _LINUX_BUFFER_HEAD_H */
483