Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
8174202b
Commit
8174202b
authored
Apr 03, 2014
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
write_iter variants of {__,}generic_file_aio_write()
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
3644424d
Changes
29
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
94 additions
and
79 deletions
+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
No files found.
fs/9p/vfs_file.c
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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.
*
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment