diff options
Diffstat (limited to 'fs/read_write.c')
-rw-r--r-- | fs/read_write.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/fs/read_write.c b/fs/read_write.c index 4771701c896b..3aa3bce18075 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -839,7 +839,7 @@ ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos, EXPORT_SYMBOL(vfs_iter_read); static ssize_t do_iter_write(struct file *file, struct iov_iter *iter, - loff_t *pos, rwf_t flags) + loff_t *pos, rwf_t flags) { size_t tot_len; ssize_t ret = 0; @@ -894,11 +894,18 @@ ssize_t vfs_iocb_iter_write(struct file *file, struct kiocb *iocb, EXPORT_SYMBOL(vfs_iocb_iter_write); ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos, - rwf_t flags) + rwf_t flags) { + int ret; + if (!file->f_op->write_iter) return -EINVAL; - return do_iter_write(file, iter, ppos, flags); + + file_start_write(file); + ret = do_iter_write(file, iter, ppos, flags); + file_end_write(file); + + return ret; } EXPORT_SYMBOL(vfs_iter_write); |