mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00: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
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/kthread.h>
|
#include <linux/kthread.h>
|
||||||
|
#include <linux/pagemap.h>
|
||||||
#include <xen/events.h>
|
#include <xen/events.h>
|
||||||
#include <xen/grant_table.h>
|
#include <xen/grant_table.h>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
@ -179,6 +179,7 @@
|
|||||||
#include <linux/kthread.h>
|
#include <linux/kthread.h>
|
||||||
#include <linux/sched/signal.h>
|
#include <linux/sched/signal.h>
|
||||||
#include <linux/limits.h>
|
#include <linux/limits.h>
|
||||||
|
#include <linux/pagemap.h>
|
||||||
#include <linux/rwsem.h>
|
#include <linux/rwsem.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <linux/time.h>
|
#include <linux/time.h>
|
||||||
#include <linux/file.h>
|
#include <linux/file.h>
|
||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
|
#include <linux/pagemap.h>
|
||||||
#include <linux/stat.h>
|
#include <linux/stat.h>
|
||||||
#include <linux/cred.h>
|
#include <linux/cred.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/iomap.h>
|
#include <linux/iomap.h>
|
||||||
#include <linux/fiemap.h>
|
#include <linux/fiemap.h>
|
||||||
|
#include <linux/pagemap.h>
|
||||||
|
|
||||||
static int iomap_to_fiemap(struct fiemap_extent_info *fi,
|
static int iomap_to_fiemap(struct fiemap_extent_info *fi,
|
||||||
const struct iomap *iomap, u32 flags)
|
const struct iomap *iomap, u32 flags)
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include <linux/hash.h>
|
#include <linux/hash.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/file.h>
|
#include <linux/file.h>
|
||||||
|
#include <linux/pagemap.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/list_lru.h>
|
#include <linux/list_lru.h>
|
||||||
#include <linux/fsnotify_backend.h>
|
#include <linux/fsnotify_backend.h>
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include <linux/xattr.h>
|
#include <linux/xattr.h>
|
||||||
#include <linux/jhash.h>
|
#include <linux/jhash.h>
|
||||||
#include <linux/ima.h>
|
#include <linux/ima.h>
|
||||||
|
#include <linux/pagemap.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <linux/exportfs.h>
|
#include <linux/exportfs.h>
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <linux/namei.h>
|
#include <linux/namei.h>
|
||||||
#include <linux/nls.h>
|
#include <linux/nls.h>
|
||||||
#include <linux/sizes.h>
|
#include <linux/sizes.h>
|
||||||
|
#include <linux/pagemap.h>
|
||||||
#include <linux/vfs.h>
|
#include <linux/vfs.h>
|
||||||
#include "vfsmod.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 void make_bad_inode(struct inode *);
|
||||||
extern bool is_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,
|
extern int __must_check file_fdatawait_range(struct file *file, loff_t lstart,
|
||||||
loff_t lend);
|
loff_t lend);
|
||||||
extern int __must_check file_check_and_advance_wb_err(struct file *file);
|
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);
|
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,
|
extern int vfs_fsync_range(struct file *file, loff_t start, loff_t end,
|
||||||
int datasync);
|
int datasync);
|
||||||
extern int vfs_fsync(struct file *file, 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,
|
extern int generic_fadvise(struct file *file, loff_t offset, loff_t len,
|
||||||
int advice);
|
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 */
|
#endif /* _LINUX_FS_H */
|
||||||
|
@ -18,6 +18,120 @@
|
|||||||
|
|
||||||
struct folio_batch;
|
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)
|
static inline bool mapping_empty(struct address_space *mapping)
|
||||||
{
|
{
|
||||||
return xa_empty(&mapping->i_pages);
|
return xa_empty(&mapping->i_pages);
|
||||||
|
Loading…
Reference in New Issue
Block a user