Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
8174202b
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8174202b
编写于
4月 03, 2014
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
write_iter variants of {__,}generic_file_aio_write()
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
3644424d
变更
29
隐藏空白更改
内联
并排
Showing
29 changed file
with
94 addition
and
79 deletion
+94
-79
fs/9p/vfs_file.c
fs/9p/vfs_file.c
+4
-4
fs/adfs/file.c
fs/adfs/file.c
+2
-2
fs/affs/file.c
fs/affs/file.c
+2
-2
fs/bfs/file.c
fs/bfs/file.c
+2
-2
fs/ecryptfs/file.c
fs/ecryptfs/file.c
+2
-2
fs/exofs/file.c
fs/exofs/file.c
+2
-2
fs/ext2/file.c
fs/ext2/file.c
+2
-2
fs/ext3/file.c
fs/ext3/file.c
+2
-2
fs/f2fs/file.c
fs/f2fs/file.c
+2
-2
fs/fat/file.c
fs/fat/file.c
+2
-2
fs/hfs/inode.c
fs/hfs/inode.c
+2
-2
fs/hfsplus/inode.c
fs/hfsplus/inode.c
+2
-2
fs/hostfs/hostfs_kern.c
fs/hostfs/hostfs_kern.c
+2
-2
fs/hpfs/file.c
fs/hpfs/file.c
+2
-2
fs/jffs2/file.c
fs/jffs2/file.c
+2
-2
fs/jfs/file.c
fs/jfs/file.c
+2
-2
fs/logfs/file.c
fs/logfs/file.c
+2
-2
fs/minix/file.c
fs/minix/file.c
+2
-2
fs/nilfs2/file.c
fs/nilfs2/file.c
+2
-2
fs/omfs/file.c
fs/omfs/file.c
+2
-2
fs/ramfs/file-mmu.c
fs/ramfs/file-mmu.c
+2
-2
fs/ramfs/file-nommu.c
fs/ramfs/file-nommu.c
+2
-2
fs/reiserfs/file.c
fs/reiserfs/file.c
+2
-2
fs/sysv/file.c
fs/sysv/file.c
+2
-2
fs/ufs/file.c
fs/ufs/file.c
+2
-2
include/linux/fs.h
include/linux/fs.h
+2
-0
mm/filemap.c
mm/filemap.c
+37
-24
mm/shmem.c
mm/shmem.c
+2
-2
mm/vmscan.c
mm/vmscan.c
+1
-1
未找到文件。
fs/9p/vfs_file.c
浏览文件 @
8174202b
...
...
@@ -763,7 +763,7 @@ v9fs_direct_write(struct file *filp, const char __user * data,
buff_write:
mutex_unlock
(
&
inode
->
i_mutex
);
return
do
_sync_write
(
filp
,
data
,
count
,
offsetp
);
return
new
_sync_write
(
filp
,
data
,
count
,
offsetp
);
}
/**
...
...
@@ -781,7 +781,7 @@ v9fs_cached_file_write(struct file *filp, const char __user * data,
if
(
filp
->
f_flags
&
O_DIRECT
)
return
v9fs_direct_write
(
filp
,
data
,
count
,
offset
);
return
do
_sync_write
(
filp
,
data
,
count
,
offset
);
return
new
_sync_write
(
filp
,
data
,
count
,
offset
);
}
...
...
@@ -851,7 +851,7 @@ const struct file_operations v9fs_cached_file_operations = {
.
read
=
v9fs_cached_file_read
,
.
write
=
v9fs_cached_file_write
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
open
=
v9fs_file_open
,
.
release
=
v9fs_dir_release
,
.
lock
=
v9fs_file_lock
,
...
...
@@ -864,7 +864,7 @@ const struct file_operations v9fs_cached_file_operations_dotl = {
.
read
=
v9fs_cached_file_read
,
.
write
=
v9fs_cached_file_write
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
open
=
v9fs_file_open
,
.
release
=
v9fs_dir_release
,
.
lock
=
v9fs_file_lock_dotl
,
...
...
fs/adfs/file.c
浏览文件 @
8174202b
...
...
@@ -27,8 +27,8 @@ const struct file_operations adfs_file_operations = {
.
read_iter
=
generic_file_read_iter
,
.
mmap
=
generic_file_mmap
,
.
fsync
=
generic_file_fsync
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
splice_read
=
generic_file_splice_read
,
};
...
...
fs/affs/file.c
浏览文件 @
8174202b
...
...
@@ -29,8 +29,8 @@ const struct file_operations affs_file_operations = {
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
open
=
affs_file_open
,
.
release
=
affs_file_release
,
...
...
fs/bfs/file.c
浏览文件 @
8174202b
...
...
@@ -25,8 +25,8 @@ const struct file_operations bfs_file_operations = {
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
splice_read
=
generic_file_splice_read
,
};
...
...
fs/ecryptfs/file.c
浏览文件 @
8174202b
...
...
@@ -353,8 +353,8 @@ const struct file_operations ecryptfs_main_fops = {
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
read_iter
=
ecryptfs_read_update_atime
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
iterate
=
ecryptfs_readdir
,
.
unlocked_ioctl
=
ecryptfs_unlocked_ioctl
,
#ifdef CONFIG_COMPAT
...
...
fs/exofs/file.c
浏览文件 @
8174202b
...
...
@@ -68,9 +68,9 @@ static int exofs_flush(struct file *file, fl_owner_t id)
const
struct
file_operations
exofs_file_operations
=
{
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
write
=
do
_sync_write
,
.
write
=
new
_sync_write
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
open
=
generic_file_open
,
.
release
=
exofs_release_file
,
...
...
fs/ext2/file.c
浏览文件 @
8174202b
...
...
@@ -63,9 +63,9 @@ int ext2_fsync(struct file *file, loff_t start, loff_t end, int datasync)
const
struct
file_operations
ext2_file_operations
=
{
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
write
=
do
_sync_write
,
.
write
=
new
_sync_write
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
unlocked_ioctl
=
ext2_ioctl
,
#ifdef CONFIG_COMPAT
.
compat_ioctl
=
ext2_compat_ioctl
,
...
...
fs/ext3/file.c
浏览文件 @
8174202b
...
...
@@ -51,9 +51,9 @@ static int ext3_release_file (struct inode * inode, struct file * filp)
const
struct
file_operations
ext3_file_operations
=
{
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
write
=
do
_sync_write
,
.
write
=
new
_sync_write
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
unlocked_ioctl
=
ext3_ioctl
,
#ifdef CONFIG_COMPAT
.
compat_ioctl
=
ext3_compat_ioctl
,
...
...
fs/f2fs/file.c
浏览文件 @
8174202b
...
...
@@ -680,9 +680,9 @@ long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
const
struct
file_operations
f2fs_file_operations
=
{
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
write
=
do
_sync_write
,
.
write
=
new
_sync_write
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
open
=
generic_file_open
,
.
mmap
=
f2fs_file_mmap
,
.
fsync
=
f2fs_sync_file
,
...
...
fs/fat/file.c
浏览文件 @
8174202b
...
...
@@ -171,9 +171,9 @@ int fat_file_fsync(struct file *filp, loff_t start, loff_t end, int datasync)
const
struct
file_operations
fat_file_operations
=
{
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
write
=
do
_sync_write
,
.
write
=
new
_sync_write
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
release
=
fat_file_release
,
.
unlocked_ioctl
=
fat_generic_ioctl
,
...
...
fs/hfs/inode.c
浏览文件 @
8174202b
...
...
@@ -676,8 +676,8 @@ static const struct file_operations hfs_file_operations = {
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
splice_read
=
generic_file_splice_read
,
.
fsync
=
hfs_file_fsync
,
...
...
fs/hfsplus/inode.c
浏览文件 @
8174202b
...
...
@@ -343,8 +343,8 @@ static const struct file_operations hfsplus_file_operations = {
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
splice_read
=
generic_file_splice_read
,
.
fsync
=
hfsplus_file_fsync
,
...
...
fs/hostfs/hostfs_kern.c
浏览文件 @
8174202b
...
...
@@ -381,8 +381,8 @@ static const struct file_operations hostfs_file_fops = {
.
read
=
new_sync_read
,
.
splice_read
=
generic_file_splice_read
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
do
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
write
=
new
_sync_write
,
.
mmap
=
generic_file_mmap
,
.
open
=
hostfs_file_open
,
.
release
=
hostfs_file_release
,
...
...
fs/hpfs/file.c
浏览文件 @
8174202b
...
...
@@ -199,8 +199,8 @@ const struct file_operations hpfs_file_ops =
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
release
=
hpfs_file_release
,
.
fsync
=
hpfs_file_fsync
,
...
...
fs/jffs2/file.c
浏览文件 @
8174202b
...
...
@@ -53,8 +53,8 @@ const struct file_operations jffs2_file_operations =
.
open
=
generic_file_open
,
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
unlocked_ioctl
=
jffs2_ioctl
,
.
mmap
=
generic_file_readonly_mmap
,
.
fsync
=
jffs2_fsync
,
...
...
fs/jfs/file.c
浏览文件 @
8174202b
...
...
@@ -151,10 +151,10 @@ const struct inode_operations jfs_file_inode_operations = {
const
struct
file_operations
jfs_file_operations
=
{
.
open
=
jfs_open
,
.
llseek
=
generic_file_llseek
,
.
write
=
do
_sync_write
,
.
write
=
new
_sync_write
,
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
splice_read
=
generic_file_splice_read
,
.
splice_write
=
generic_file_splice_write
,
...
...
fs/logfs/file.c
浏览文件 @
8174202b
...
...
@@ -265,14 +265,14 @@ const struct inode_operations logfs_reg_iops = {
const
struct
file_operations
logfs_reg_fops
=
{
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
fsync
=
logfs_fsync
,
.
unlocked_ioctl
=
logfs_ioctl
,
.
llseek
=
generic_file_llseek
,
.
mmap
=
generic_file_readonly_mmap
,
.
open
=
generic_file_open
,
.
read
=
new_sync_read
,
.
write
=
do
_sync_write
,
.
write
=
new
_sync_write
,
};
const
struct
address_space_operations
logfs_reg_aops
=
{
...
...
fs/minix/file.c
浏览文件 @
8174202b
...
...
@@ -16,8 +16,8 @@ const struct file_operations minix_file_operations = {
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
fsync
=
generic_file_fsync
,
.
splice_read
=
generic_file_splice_read
,
...
...
fs/nilfs2/file.c
浏览文件 @
8174202b
...
...
@@ -153,9 +153,9 @@ static int nilfs_file_mmap(struct file *file, struct vm_area_struct *vma)
const
struct
file_operations
nilfs_file_operations
=
{
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
write
=
do
_sync_write
,
.
write
=
new
_sync_write
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
unlocked_ioctl
=
nilfs_ioctl
,
#ifdef CONFIG_COMPAT
.
compat_ioctl
=
nilfs_compat_ioctl
,
...
...
fs/omfs/file.c
浏览文件 @
8174202b
...
...
@@ -338,9 +338,9 @@ static sector_t omfs_bmap(struct address_space *mapping, sector_t block)
const
struct
file_operations
omfs_file_operations
=
{
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
write
=
do
_sync_write
,
.
write
=
new
_sync_write
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
fsync
=
generic_file_fsync
,
.
splice_read
=
generic_file_splice_read
,
...
...
fs/ramfs/file-mmu.c
浏览文件 @
8174202b
...
...
@@ -33,8 +33,8 @@
const
struct
file_operations
ramfs_file_operations
=
{
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
fsync
=
noop_fsync
,
.
splice_read
=
generic_file_splice_read
,
...
...
fs/ramfs/file-nommu.c
浏览文件 @
8174202b
...
...
@@ -39,8 +39,8 @@ const struct file_operations ramfs_file_operations = {
.
get_unmapped_area
=
ramfs_nommu_get_unmapped_area
,
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
fsync
=
noop_fsync
,
.
splice_read
=
generic_file_splice_read
,
.
splice_write
=
generic_file_splice_write
,
...
...
fs/reiserfs/file.c
浏览文件 @
8174202b
...
...
@@ -236,7 +236,7 @@ int reiserfs_commit_page(struct inode *inode, struct page *page,
const
struct
file_operations
reiserfs_file_operations
=
{
.
read
=
new_sync_read
,
.
write
=
do
_sync_write
,
.
write
=
new
_sync_write
,
.
unlocked_ioctl
=
reiserfs_ioctl
,
#ifdef CONFIG_COMPAT
.
compat_ioctl
=
reiserfs_compat_ioctl
,
...
...
@@ -246,7 +246,7 @@ const struct file_operations reiserfs_file_operations = {
.
release
=
reiserfs_file_release
,
.
fsync
=
reiserfs_sync_file
,
.
read_iter
=
generic_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
splice_read
=
generic_file_splice_read
,
.
splice_write
=
generic_file_splice_write
,
.
llseek
=
generic_file_llseek
,
...
...
fs/sysv/file.c
浏览文件 @
8174202b
...
...
@@ -23,8 +23,8 @@ const struct file_operations sysv_file_operations = {
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
fsync
=
generic_file_fsync
,
.
splice_read
=
generic_file_splice_read
,
...
...
fs/ufs/file.c
浏览文件 @
8174202b
...
...
@@ -37,8 +37,8 @@ const struct file_operations ufs_file_operations = {
.
llseek
=
generic_file_llseek
,
.
read
=
new_sync_read
,
.
read_iter
=
generic_file_read_iter
,
.
write
=
do
_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
write
=
new
_sync_write
,
.
write_iter
=
generic_file_write_iter
,
.
mmap
=
generic_file_mmap
,
.
open
=
generic_file_open
,
.
fsync
=
generic_file_fsync
,
...
...
include/linux/fs.h
浏览文件 @
8174202b
...
...
@@ -2414,7 +2414,9 @@ int generic_write_checks(struct file *file, loff_t *pos, size_t *count, int isbl
extern
ssize_t
generic_file_aio_read
(
struct
kiocb
*
,
const
struct
iovec
*
,
unsigned
long
,
loff_t
);
extern
ssize_t
generic_file_read_iter
(
struct
kiocb
*
,
struct
iov_iter
*
);
extern
ssize_t
__generic_file_aio_write
(
struct
kiocb
*
,
const
struct
iovec
*
,
unsigned
long
);
extern
ssize_t
__generic_file_write_iter
(
struct
kiocb
*
,
struct
iov_iter
*
);
extern
ssize_t
generic_file_aio_write
(
struct
kiocb
*
,
const
struct
iovec
*
,
unsigned
long
,
loff_t
);
extern
ssize_t
generic_file_write_iter
(
struct
kiocb
*
,
struct
iov_iter
*
);
extern
ssize_t
generic_file_direct_write
(
struct
kiocb
*
,
struct
iov_iter
*
,
loff_t
);
extern
ssize_t
generic_perform_write
(
struct
file
*
,
struct
iov_iter
*
,
loff_t
);
extern
ssize_t
do_sync_read
(
struct
file
*
filp
,
char
__user
*
buf
,
size_t
len
,
loff_t
*
ppos
);
...
...
mm/filemap.c
浏览文件 @
8174202b
...
...
@@ -2542,10 +2542,9 @@ ssize_t generic_perform_write(struct file *file,
EXPORT_SYMBOL
(
generic_perform_write
);
/**
* __generic_file_
aio_write
- write data to a file
* __generic_file_
write_iter
- write data to a file
* @iocb: IO state structure (file, offset, etc.)
* @iov: vector with data to write
* @nr_segs: number of segments in the vector
* @from: iov_iter with data to write
*
* This function does all the work needed for actually writing data to a
* file. It does all basic checks, removes SUID from the file, updates
...
...
@@ -2559,21 +2558,16 @@ EXPORT_SYMBOL(generic_perform_write);
* A caller has to handle it. This is mainly due to the fact that we want to
* avoid syncing under i_mutex.
*/
ssize_t
__generic_file_aio_write
(
struct
kiocb
*
iocb
,
const
struct
iovec
*
iov
,
unsigned
long
nr_segs
)
ssize_t
__generic_file_write_iter
(
struct
kiocb
*
iocb
,
struct
iov_iter
*
from
)
{
struct
file
*
file
=
iocb
->
ki_filp
;
struct
address_space
*
mapping
=
file
->
f_mapping
;
size_t
count
;
/* after file limit checks */
struct
inode
*
inode
=
mapping
->
host
;
loff_t
pos
=
iocb
->
ki_pos
;
ssize_t
written
=
0
;
ssize_t
err
;
ssize_t
status
;
struct
iov_iter
from
;
count
=
iov_length
(
iov
,
nr_segs
);
iov_iter_init
(
&
from
,
WRITE
,
iov
,
nr_segs
,
count
);
size_t
count
=
iov_iter_count
(
from
);
/* We can write back this queue in page reclaim */
current
->
backing_dev_info
=
mapping
->
backing_dev_info
;
...
...
@@ -2584,7 +2578,7 @@ ssize_t __generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
if
(
count
==
0
)
goto
out
;
iov_iter_truncate
(
&
from
,
count
);
iov_iter_truncate
(
from
,
count
);
err
=
file_remove_suid
(
file
);
if
(
err
)
...
...
@@ -2598,7 +2592,7 @@ ssize_t __generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
if
(
unlikely
(
file
->
f_flags
&
O_DIRECT
))
{
loff_t
endbyte
;
written
=
generic_file_direct_write
(
iocb
,
&
from
,
pos
);
written
=
generic_file_direct_write
(
iocb
,
from
,
pos
);
if
(
written
<
0
||
written
==
count
)
goto
out
;
...
...
@@ -2609,7 +2603,7 @@ ssize_t __generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
pos
+=
written
;
count
-=
written
;
status
=
generic_perform_write
(
file
,
&
from
,
pos
);
status
=
generic_perform_write
(
file
,
from
,
pos
);
/*
* If generic_perform_write() returned a synchronous error
* then we want to return the number of bytes which were
...
...
@@ -2641,7 +2635,7 @@ ssize_t __generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
*/
}
}
else
{
written
=
generic_perform_write
(
file
,
&
from
,
pos
);
written
=
generic_perform_write
(
file
,
from
,
pos
);
if
(
likely
(
written
>=
0
))
iocb
->
ki_pos
=
pos
+
written
;
}
...
...
@@ -2649,30 +2643,36 @@ ssize_t __generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
current
->
backing_dev_info
=
NULL
;
return
written
?
written
:
err
;
}
EXPORT_SYMBOL
(
__generic_file_write_iter
);
ssize_t
__generic_file_aio_write
(
struct
kiocb
*
iocb
,
const
struct
iovec
*
iov
,
unsigned
long
nr_segs
)
{
size_t
count
=
iov_length
(
iov
,
nr_segs
);
struct
iov_iter
from
;
iov_iter_init
(
&
from
,
WRITE
,
iov
,
nr_segs
,
count
);
return
__generic_file_write_iter
(
iocb
,
&
from
);
}
EXPORT_SYMBOL
(
__generic_file_aio_write
);
/**
* generic_file_
aio_write
- write data to a file
* generic_file_
write_iter
- write data to a file
* @iocb: IO state structure
* @iov: vector with data to write
* @nr_segs: number of segments in the vector
* @pos: position in file where to write
* @from: iov_iter with data to write
*
* This is a wrapper around __generic_file_
aio_write
() to be used by most
* This is a wrapper around __generic_file_
write_iter
() to be used by most
* filesystems. It takes care of syncing the file in case of O_SYNC file
* and acquires i_mutex as needed.
*/
ssize_t
generic_file_aio_write
(
struct
kiocb
*
iocb
,
const
struct
iovec
*
iov
,
unsigned
long
nr_segs
,
loff_t
pos
)
ssize_t
generic_file_write_iter
(
struct
kiocb
*
iocb
,
struct
iov_iter
*
from
)
{
struct
file
*
file
=
iocb
->
ki_filp
;
struct
inode
*
inode
=
file
->
f_mapping
->
host
;
ssize_t
ret
;
BUG_ON
(
iocb
->
ki_pos
!=
pos
);
mutex_lock
(
&
inode
->
i_mutex
);
ret
=
__generic_file_
aio_write
(
iocb
,
iov
,
nr_segs
);
ret
=
__generic_file_
write_iter
(
iocb
,
from
);
mutex_unlock
(
&
inode
->
i_mutex
);
if
(
ret
>
0
)
{
...
...
@@ -2684,6 +2684,19 @@ ssize_t generic_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
}
return
ret
;
}
EXPORT_SYMBOL
(
generic_file_write_iter
);
ssize_t
generic_file_aio_write
(
struct
kiocb
*
iocb
,
const
struct
iovec
*
iov
,
unsigned
long
nr_segs
,
loff_t
pos
)
{
size_t
count
=
iov_length
(
iov
,
nr_segs
);
struct
iov_iter
from
;
BUG_ON
(
iocb
->
ki_pos
!=
pos
);
iov_iter_init
(
&
from
,
WRITE
,
iov
,
nr_segs
,
count
);
return
generic_file_write_iter
(
iocb
,
&
from
);
}
EXPORT_SYMBOL
(
generic_file_aio_write
);
/**
...
...
mm/shmem.c
浏览文件 @
8174202b
...
...
@@ -2618,9 +2618,9 @@ static const struct file_operations shmem_file_operations = {
#ifdef CONFIG_TMPFS
.
llseek
=
shmem_file_llseek
,
.
read
=
new_sync_read
,
.
write
=
do
_sync_write
,
.
write
=
new
_sync_write
,
.
read_iter
=
shmem_file_read_iter
,
.
aio_write
=
generic_file_aio_write
,
.
write_iter
=
generic_file_write_iter
,
.
fsync
=
noop_fsync
,
.
splice_read
=
shmem_file_splice_read
,
.
splice_write
=
generic_file_splice_write
,
...
...
mm/vmscan.c
浏览文件 @
8174202b
...
...
@@ -458,7 +458,7 @@ static pageout_t pageout(struct page *page, struct address_space *mapping,
* stalls if we need to run get_block(). We could test
* PagePrivate for that.
*
* If this process is currently in __generic_file_
aio_write
() against
* If this process is currently in __generic_file_
write_iter
() against
* this page's queue, we can perform writeback even if that
* will block.
*
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录