diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2015-04-09 13:52:01 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-04-11 22:30:22 -0400 |
commit | 2ba48ce513c4e545318d22b138861d5876edf906 (patch) | |
tree | 0e2a5130ead5c71f0b079b1acd620fba98f99256 /fs/ext4 | |
parent | 3309dd04cbcd2cdad168485af5cf3576b5051e49 (diff) |
mirror O_APPEND and O_DIRECT into iocb->ki_flags
... avoiding write_iter/fcntl races.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/ext4')
-rw-r--r-- | fs/ext4/file.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/ext4/file.c b/fs/ext4/file.c index c10785f10d1d..53bbc0b1995f 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c | |||
@@ -95,7 +95,7 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from) | |||
95 | struct inode *inode = file_inode(iocb->ki_filp); | 95 | struct inode *inode = file_inode(iocb->ki_filp); |
96 | struct mutex *aio_mutex = NULL; | 96 | struct mutex *aio_mutex = NULL; |
97 | struct blk_plug plug; | 97 | struct blk_plug plug; |
98 | int o_direct = io_is_direct(file); | 98 | int o_direct = iocb->ki_flags & IOCB_DIRECT; |
99 | int overwrite = 0; | 99 | int overwrite = 0; |
100 | ssize_t ret; | 100 | ssize_t ret; |
101 | 101 | ||
@@ -106,7 +106,7 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from) | |||
106 | if (o_direct && | 106 | if (o_direct && |
107 | ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS) && | 107 | ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS) && |
108 | !is_sync_kiocb(iocb) && | 108 | !is_sync_kiocb(iocb) && |
109 | (file->f_flags & O_APPEND || | 109 | (iocb->ki_flags & IOCB_APPEND || |
110 | ext4_unaligned_aio(inode, from, iocb->ki_pos))) { | 110 | ext4_unaligned_aio(inode, from, iocb->ki_pos))) { |
111 | aio_mutex = ext4_aio_mutex(inode); | 111 | aio_mutex = ext4_aio_mutex(inode); |
112 | mutex_lock(aio_mutex); | 112 | mutex_lock(aio_mutex); |