diff options
author | Theodore Ts'o <tytso@mit.edu> | 2014-04-21 14:26:28 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2014-04-21 14:26:28 -0400 |
commit | 7608e61044e7636a2ca04ff33fa1ff9697d1df88 (patch) | |
tree | e7edb7085f593254e8c581512ee853892934b607 /fs | |
parent | 556615dcbf38b0a92a9e659f52c06686270dfc16 (diff) |
ext4: inline generic_file_aio_write() into ext4_file_write()
Copy generic_file_aio_write() into ext4_file_write(). This is part of
a patch series which allows us to simplify ext4_file_write() and
ext4_file_dio_write(), by calling __generic_file_aio_write() directly.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Reviewed-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ext4/file.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/fs/ext4/file.c b/fs/ext4/file.c index bf0e772b6a03..79b77a51a322 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c | |||
@@ -113,8 +113,6 @@ ext4_file_dio_write(struct kiocb *iocb, const struct iovec *iov, | |||
113 | ext4_unwritten_wait(inode); | 113 | ext4_unwritten_wait(inode); |
114 | } | 114 | } |
115 | 115 | ||
116 | BUG_ON(iocb->ki_pos != pos); | ||
117 | |||
118 | mutex_lock(&inode->i_mutex); | 116 | mutex_lock(&inode->i_mutex); |
119 | blk_start_plug(&plug); | 117 | blk_start_plug(&plug); |
120 | 118 | ||
@@ -168,9 +166,12 @@ static ssize_t | |||
168 | ext4_file_write(struct kiocb *iocb, const struct iovec *iov, | 166 | ext4_file_write(struct kiocb *iocb, const struct iovec *iov, |
169 | unsigned long nr_segs, loff_t pos) | 167 | unsigned long nr_segs, loff_t pos) |
170 | { | 168 | { |
169 | struct file *file = iocb->ki_filp; | ||
171 | struct inode *inode = file_inode(iocb->ki_filp); | 170 | struct inode *inode = file_inode(iocb->ki_filp); |
172 | ssize_t ret; | 171 | ssize_t ret; |
173 | 172 | ||
173 | BUG_ON(iocb->ki_pos != pos); | ||
174 | |||
174 | /* | 175 | /* |
175 | * If we have encountered a bitmap-format file, the size limit | 176 | * If we have encountered a bitmap-format file, the size limit |
176 | * is smaller than s_maxbytes, which is for extent-mapped files. | 177 | * is smaller than s_maxbytes, which is for extent-mapped files. |
@@ -192,8 +193,19 @@ ext4_file_write(struct kiocb *iocb, const struct iovec *iov, | |||
192 | 193 | ||
193 | if (unlikely(iocb->ki_filp->f_flags & O_DIRECT)) | 194 | if (unlikely(iocb->ki_filp->f_flags & O_DIRECT)) |
194 | ret = ext4_file_dio_write(iocb, iov, nr_segs, pos); | 195 | ret = ext4_file_dio_write(iocb, iov, nr_segs, pos); |
195 | else | 196 | else { |
196 | ret = generic_file_aio_write(iocb, iov, nr_segs, pos); | 197 | mutex_lock(&inode->i_mutex); |
198 | ret = __generic_file_aio_write(iocb, iov, nr_segs); | ||
199 | mutex_unlock(&inode->i_mutex); | ||
200 | |||
201 | if (ret > 0) { | ||
202 | ssize_t err; | ||
203 | |||
204 | err = generic_write_sync(file, iocb->ki_pos - ret, ret); | ||
205 | if (err < 0) | ||
206 | ret = err; | ||
207 | } | ||
208 | } | ||
197 | 209 | ||
198 | return ret; | 210 | return ret; |
199 | } | 211 | } |