fold do_sync_file_range into sys_sync_file_range
We recently go rid of all callers of do_sync_file_range as they're better served with vfs_fsync or the filemap_write_and_wait. Now that do_sync_file_range is down to a single caller fold it into it so that people don't start using it again accidentally. While at it also switch it from using __filemap_fdatawrite_range(..., WB_SYNC_ALL) to the more clear filemap_fdatawrite_range(). Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
76b7e0058d
Коммит
7a0ad10c36
59
fs/sync.c
59
fs/sync.c
|
@ -355,6 +355,7 @@ SYSCALL_DEFINE(sync_file_range)(int fd, loff_t offset, loff_t nbytes,
|
|||
{
|
||||
int ret;
|
||||
struct file *file;
|
||||
struct address_space *mapping;
|
||||
loff_t endbyte; /* inclusive */
|
||||
int fput_needed;
|
||||
umode_t i_mode;
|
||||
|
@ -405,7 +406,28 @@ SYSCALL_DEFINE(sync_file_range)(int fd, loff_t offset, loff_t nbytes,
|
|||
!S_ISLNK(i_mode))
|
||||
goto out_put;
|
||||
|
||||
ret = do_sync_mapping_range(file->f_mapping, offset, endbyte, flags);
|
||||
mapping = file->f_mapping;
|
||||
if (!mapping) {
|
||||
ret = -EINVAL;
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
|
||||
ret = filemap_fdatawait_range(mapping, offset, endbyte);
|
||||
if (ret < 0)
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
if (flags & SYNC_FILE_RANGE_WRITE) {
|
||||
ret = filemap_fdatawrite_range(mapping, offset, endbyte);
|
||||
if (ret < 0)
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
if (flags & SYNC_FILE_RANGE_WAIT_AFTER)
|
||||
ret = filemap_fdatawait_range(mapping, offset, endbyte);
|
||||
|
||||
out_put:
|
||||
fput_light(file, fput_needed);
|
||||
out:
|
||||
|
@ -437,38 +459,3 @@ asmlinkage long SyS_sync_file_range2(long fd, long flags,
|
|||
}
|
||||
SYSCALL_ALIAS(sys_sync_file_range2, SyS_sync_file_range2);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* `endbyte' is inclusive
|
||||
*/
|
||||
int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
|
||||
loff_t endbyte, unsigned int flags)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!mapping) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
|
||||
ret = filemap_fdatawait_range(mapping, offset, endbyte);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (flags & SYNC_FILE_RANGE_WRITE) {
|
||||
ret = __filemap_fdatawrite_range(mapping, offset, endbyte,
|
||||
WB_SYNC_ALL);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
|
||||
ret = filemap_fdatawait_range(mapping, offset, endbyte);
|
||||
}
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(do_sync_mapping_range);
|
||||
|
|
|
@ -1095,10 +1095,6 @@ struct file_lock {
|
|||
|
||||
extern void send_sigio(struct fown_struct *fown, int fd, int band);
|
||||
|
||||
/* fs/sync.c */
|
||||
extern int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
|
||||
loff_t endbyte, unsigned int flags);
|
||||
|
||||
#ifdef CONFIG_FILE_LOCKING
|
||||
extern int fcntl_getlk(struct file *, struct flock __user *);
|
||||
extern int fcntl_setlk(unsigned int, struct file *, unsigned int,
|
||||
|
|
Загрузка…
Ссылка в новой задаче