mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	fs: Move many prototypes to pagemap.h
These functions are page cache functionality and don't need to be declared in fs.h. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Miaohe Lin <linmiaohe@huawei.com>
This commit is contained in:
		
							parent
							
								
									c56109dd35
								
							
						
					
					
						commit
						cbcc268bb1
					
				
					 9 changed files with 121 additions and 116 deletions
				
			
		|  | @ -10,6 +10,7 @@ | |||
| 
 | ||||
| #include <linux/module.h> | ||||
| #include <linux/kthread.h> | ||||
| #include <linux/pagemap.h> | ||||
| #include <xen/events.h> | ||||
| #include <xen/grant_table.h> | ||||
| #include "common.h" | ||||
|  |  | |||
|  | @ -179,6 +179,7 @@ | |||
| #include <linux/kthread.h> | ||||
| #include <linux/sched/signal.h> | ||||
| #include <linux/limits.h> | ||||
| #include <linux/pagemap.h> | ||||
| #include <linux/rwsem.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/spinlock.h> | ||||
|  |  | |||
|  | @ -14,6 +14,7 @@ | |||
| #include <linux/time.h> | ||||
| #include <linux/file.h> | ||||
| #include <linux/fs.h> | ||||
| #include <linux/pagemap.h> | ||||
| #include <linux/stat.h> | ||||
| #include <linux/cred.h> | ||||
| #include <linux/errno.h> | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| #include <linux/fs.h> | ||||
| #include <linux/iomap.h> | ||||
| #include <linux/fiemap.h> | ||||
| #include <linux/pagemap.h> | ||||
| 
 | ||||
| static int iomap_to_fiemap(struct fiemap_extent_info *fi, | ||||
| 		const struct iomap *iomap, u32 flags) | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| #include <linux/hash.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/file.h> | ||||
| #include <linux/pagemap.h> | ||||
| #include <linux/sched.h> | ||||
| #include <linux/list_lru.h> | ||||
| #include <linux/fsnotify_backend.h> | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ | |||
| #include <linux/xattr.h> | ||||
| #include <linux/jhash.h> | ||||
| #include <linux/ima.h> | ||||
| #include <linux/pagemap.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/uaccess.h> | ||||
| #include <linux/exportfs.h> | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ | |||
| #include <linux/namei.h> | ||||
| #include <linux/nls.h> | ||||
| #include <linux/sizes.h> | ||||
| #include <linux/pagemap.h> | ||||
| #include <linux/vfs.h> | ||||
| #include "vfsmod.h" | ||||
| 
 | ||||
|  |  | |||
|  | @ -2746,50 +2746,6 @@ extern void init_special_inode(struct inode *, umode_t, dev_t); | |||
| extern void make_bad_inode(struct inode *); | ||||
| extern bool is_bad_inode(struct inode *); | ||||
| 
 | ||||
| unsigned long invalidate_mapping_pages(struct address_space *mapping, | ||||
| 					pgoff_t start, pgoff_t end); | ||||
| 
 | ||||
| static inline void invalidate_remote_inode(struct inode *inode) | ||||
| { | ||||
| 	if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || | ||||
| 	    S_ISLNK(inode->i_mode)) | ||||
| 		invalidate_mapping_pages(inode->i_mapping, 0, -1); | ||||
| } | ||||
| extern int invalidate_inode_pages2(struct address_space *mapping); | ||||
| extern int invalidate_inode_pages2_range(struct address_space *mapping, | ||||
| 					 pgoff_t start, pgoff_t end); | ||||
| extern int write_inode_now(struct inode *, int); | ||||
| extern int filemap_fdatawrite(struct address_space *); | ||||
| extern int filemap_flush(struct address_space *); | ||||
| extern int filemap_fdatawait_keep_errors(struct address_space *mapping); | ||||
| extern int filemap_fdatawait_range(struct address_space *, loff_t lstart, | ||||
| 				   loff_t lend); | ||||
| extern int filemap_fdatawait_range_keep_errors(struct address_space *mapping, | ||||
| 		loff_t start_byte, loff_t end_byte); | ||||
| 
 | ||||
| static inline int filemap_fdatawait(struct address_space *mapping) | ||||
| { | ||||
| 	return filemap_fdatawait_range(mapping, 0, LLONG_MAX); | ||||
| } | ||||
| 
 | ||||
| extern bool filemap_range_has_page(struct address_space *, loff_t lstart, | ||||
| 				  loff_t lend); | ||||
| extern int filemap_write_and_wait_range(struct address_space *mapping, | ||||
| 				        loff_t lstart, loff_t lend); | ||||
| extern int __filemap_fdatawrite_range(struct address_space *mapping, | ||||
| 				loff_t start, loff_t end, int sync_mode); | ||||
| extern int filemap_fdatawrite_range(struct address_space *mapping, | ||||
| 				loff_t start, loff_t end); | ||||
| extern int filemap_check_errors(struct address_space *mapping); | ||||
| extern void __filemap_set_wb_err(struct address_space *mapping, int err); | ||||
| int filemap_fdatawrite_wbc(struct address_space *mapping, | ||||
| 			   struct writeback_control *wbc); | ||||
| 
 | ||||
| static inline int filemap_write_and_wait(struct address_space *mapping) | ||||
| { | ||||
| 	return filemap_write_and_wait_range(mapping, 0, LLONG_MAX); | ||||
| } | ||||
| 
 | ||||
| extern int __must_check file_fdatawait_range(struct file *file, loff_t lstart, | ||||
| 						loff_t lend); | ||||
| extern int __must_check file_check_and_advance_wb_err(struct file *file); | ||||
|  | @ -2801,67 +2757,6 @@ static inline int file_write_and_wait(struct file *file) | |||
| 	return file_write_and_wait_range(file, 0, LLONG_MAX); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * filemap_set_wb_err - set a writeback error on an address_space | ||||
|  * @mapping: mapping in which to set writeback error | ||||
|  * @err: error to be set in mapping | ||||
|  * | ||||
|  * When writeback fails in some way, we must record that error so that | ||||
|  * userspace can be informed when fsync and the like are called.  We endeavor | ||||
|  * to report errors on any file that was open at the time of the error.  Some | ||||
|  * internal callers also need to know when writeback errors have occurred. | ||||
|  * | ||||
|  * When a writeback error occurs, most filesystems will want to call | ||||
|  * filemap_set_wb_err to record the error in the mapping so that it will be | ||||
|  * automatically reported whenever fsync is called on the file. | ||||
|  */ | ||||
| static inline void filemap_set_wb_err(struct address_space *mapping, int err) | ||||
| { | ||||
| 	/* Fastpath for common case of no error */ | ||||
| 	if (unlikely(err)) | ||||
| 		__filemap_set_wb_err(mapping, err); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * filemap_check_wb_err - has an error occurred since the mark was sampled? | ||||
|  * @mapping: mapping to check for writeback errors | ||||
|  * @since: previously-sampled errseq_t | ||||
|  * | ||||
|  * Grab the errseq_t value from the mapping, and see if it has changed "since" | ||||
|  * the given value was sampled. | ||||
|  * | ||||
|  * If it has then report the latest error set, otherwise return 0. | ||||
|  */ | ||||
| static inline int filemap_check_wb_err(struct address_space *mapping, | ||||
| 					errseq_t since) | ||||
| { | ||||
| 	return errseq_check(&mapping->wb_err, since); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * filemap_sample_wb_err - sample the current errseq_t to test for later errors | ||||
|  * @mapping: mapping to be sampled | ||||
|  * | ||||
|  * Writeback errors are always reported relative to a particular sample point | ||||
|  * in the past. This function provides those sample points. | ||||
|  */ | ||||
| static inline errseq_t filemap_sample_wb_err(struct address_space *mapping) | ||||
| { | ||||
| 	return errseq_sample(&mapping->wb_err); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * file_sample_sb_err - sample the current errseq_t to test for later errors | ||||
|  * @file: file pointer to be sampled | ||||
|  * | ||||
|  * Grab the most current superblock-level errseq_t value for the given | ||||
|  * struct file. | ||||
|  */ | ||||
| static inline errseq_t file_sample_sb_err(struct file *file) | ||||
| { | ||||
| 	return errseq_sample(&file->f_path.dentry->d_sb->s_wb_err); | ||||
| } | ||||
| 
 | ||||
| extern int vfs_fsync_range(struct file *file, loff_t start, loff_t end, | ||||
| 			   int datasync); | ||||
| extern int vfs_fsync(struct file *file, int datasync); | ||||
|  | @ -3604,15 +3499,4 @@ extern int vfs_fadvise(struct file *file, loff_t offset, loff_t len, | |||
| extern int generic_fadvise(struct file *file, loff_t offset, loff_t len, | ||||
| 			   int advice); | ||||
| 
 | ||||
| /*
 | ||||
|  * Flush file data before changing attributes.  Caller must hold any locks | ||||
|  * required to prevent further writes to this file until we're done setting | ||||
|  * flags. | ||||
|  */ | ||||
| static inline int inode_drain_writes(struct inode *inode) | ||||
| { | ||||
| 	inode_dio_wait(inode); | ||||
| 	return filemap_write_and_wait(inode->i_mapping); | ||||
| } | ||||
| 
 | ||||
| #endif /* _LINUX_FS_H */ | ||||
|  |  | |||
|  | @ -18,6 +18,120 @@ | |||
| 
 | ||||
| struct folio_batch; | ||||
| 
 | ||||
| unsigned long invalidate_mapping_pages(struct address_space *mapping, | ||||
| 					pgoff_t start, pgoff_t end); | ||||
| 
 | ||||
| static inline void invalidate_remote_inode(struct inode *inode) | ||||
| { | ||||
| 	if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || | ||||
| 	    S_ISLNK(inode->i_mode)) | ||||
| 		invalidate_mapping_pages(inode->i_mapping, 0, -1); | ||||
| } | ||||
| int invalidate_inode_pages2(struct address_space *mapping); | ||||
| int invalidate_inode_pages2_range(struct address_space *mapping, | ||||
| 		pgoff_t start, pgoff_t end); | ||||
| int write_inode_now(struct inode *, int sync); | ||||
| int filemap_fdatawrite(struct address_space *); | ||||
| int filemap_flush(struct address_space *); | ||||
| int filemap_fdatawait_keep_errors(struct address_space *mapping); | ||||
| int filemap_fdatawait_range(struct address_space *, loff_t lstart, loff_t lend); | ||||
| int filemap_fdatawait_range_keep_errors(struct address_space *mapping, | ||||
| 		loff_t start_byte, loff_t end_byte); | ||||
| 
 | ||||
| static inline int filemap_fdatawait(struct address_space *mapping) | ||||
| { | ||||
| 	return filemap_fdatawait_range(mapping, 0, LLONG_MAX); | ||||
| } | ||||
| 
 | ||||
| bool filemap_range_has_page(struct address_space *, loff_t lstart, loff_t lend); | ||||
| int filemap_write_and_wait_range(struct address_space *mapping, | ||||
| 		loff_t lstart, loff_t lend); | ||||
| int __filemap_fdatawrite_range(struct address_space *mapping, | ||||
| 		loff_t start, loff_t end, int sync_mode); | ||||
| int filemap_fdatawrite_range(struct address_space *mapping, | ||||
| 		loff_t start, loff_t end); | ||||
| int filemap_check_errors(struct address_space *mapping); | ||||
| void __filemap_set_wb_err(struct address_space *mapping, int err); | ||||
| int filemap_fdatawrite_wbc(struct address_space *mapping, | ||||
| 			   struct writeback_control *wbc); | ||||
| 
 | ||||
| static inline int filemap_write_and_wait(struct address_space *mapping) | ||||
| { | ||||
| 	return filemap_write_and_wait_range(mapping, 0, LLONG_MAX); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * filemap_set_wb_err - set a writeback error on an address_space | ||||
|  * @mapping: mapping in which to set writeback error | ||||
|  * @err: error to be set in mapping | ||||
|  * | ||||
|  * When writeback fails in some way, we must record that error so that | ||||
|  * userspace can be informed when fsync and the like are called.  We endeavor | ||||
|  * to report errors on any file that was open at the time of the error.  Some | ||||
|  * internal callers also need to know when writeback errors have occurred. | ||||
|  * | ||||
|  * When a writeback error occurs, most filesystems will want to call | ||||
|  * filemap_set_wb_err to record the error in the mapping so that it will be | ||||
|  * automatically reported whenever fsync is called on the file. | ||||
|  */ | ||||
| static inline void filemap_set_wb_err(struct address_space *mapping, int err) | ||||
| { | ||||
| 	/* Fastpath for common case of no error */ | ||||
| 	if (unlikely(err)) | ||||
| 		__filemap_set_wb_err(mapping, err); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * filemap_check_wb_err - has an error occurred since the mark was sampled? | ||||
|  * @mapping: mapping to check for writeback errors | ||||
|  * @since: previously-sampled errseq_t | ||||
|  * | ||||
|  * Grab the errseq_t value from the mapping, and see if it has changed "since" | ||||
|  * the given value was sampled. | ||||
|  * | ||||
|  * If it has then report the latest error set, otherwise return 0. | ||||
|  */ | ||||
| static inline int filemap_check_wb_err(struct address_space *mapping, | ||||
| 					errseq_t since) | ||||
| { | ||||
| 	return errseq_check(&mapping->wb_err, since); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * filemap_sample_wb_err - sample the current errseq_t to test for later errors | ||||
|  * @mapping: mapping to be sampled | ||||
|  * | ||||
|  * Writeback errors are always reported relative to a particular sample point | ||||
|  * in the past. This function provides those sample points. | ||||
|  */ | ||||
| static inline errseq_t filemap_sample_wb_err(struct address_space *mapping) | ||||
| { | ||||
| 	return errseq_sample(&mapping->wb_err); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * file_sample_sb_err - sample the current errseq_t to test for later errors | ||||
|  * @file: file pointer to be sampled | ||||
|  * | ||||
|  * Grab the most current superblock-level errseq_t value for the given | ||||
|  * struct file. | ||||
|  */ | ||||
| static inline errseq_t file_sample_sb_err(struct file *file) | ||||
| { | ||||
| 	return errseq_sample(&file->f_path.dentry->d_sb->s_wb_err); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Flush file data before changing attributes.  Caller must hold any locks | ||||
|  * required to prevent further writes to this file until we're done setting | ||||
|  * flags. | ||||
|  */ | ||||
| static inline int inode_drain_writes(struct inode *inode) | ||||
| { | ||||
| 	inode_dio_wait(inode); | ||||
| 	return filemap_write_and_wait(inode->i_mapping); | ||||
| } | ||||
| 
 | ||||
| static inline bool mapping_empty(struct address_space *mapping) | ||||
| { | ||||
| 	return xa_empty(&mapping->i_pages); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Matthew Wilcox (Oracle)
						Matthew Wilcox (Oracle)