Commit bb7462b6 authored by Miklos Szeredi's avatar Miklos Szeredi

vfs: use helpers for calling f_op->{read,write}_iter()

Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent 0f78d06a
...@@ -501,9 +501,9 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd, ...@@ -501,9 +501,9 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd,
cmd->iocb.ki_flags = IOCB_DIRECT; cmd->iocb.ki_flags = IOCB_DIRECT;
if (rw == WRITE) if (rw == WRITE)
ret = file->f_op->write_iter(&cmd->iocb, &iter); ret = call_write_iter(file, &cmd->iocb, &iter);
else else
ret = file->f_op->read_iter(&cmd->iocb, &iter); ret = call_read_iter(file, &cmd->iocb, &iter);
if (ret != -EIOCBQUEUED) if (ret != -EIOCBQUEUED)
cmd->iocb.ki_complete(&cmd->iocb, ret, 0); cmd->iocb.ki_complete(&cmd->iocb, ret, 0);
......
...@@ -1494,7 +1494,7 @@ static ssize_t aio_read(struct kiocb *req, struct iocb *iocb, bool vectored, ...@@ -1494,7 +1494,7 @@ static ssize_t aio_read(struct kiocb *req, struct iocb *iocb, bool vectored,
return ret; return ret;
ret = rw_verify_area(READ, file, &req->ki_pos, iov_iter_count(&iter)); ret = rw_verify_area(READ, file, &req->ki_pos, iov_iter_count(&iter));
if (!ret) if (!ret)
ret = aio_ret(req, file->f_op->read_iter(req, &iter)); ret = aio_ret(req, call_read_iter(file, req, &iter));
kfree(iovec); kfree(iovec);
return ret; return ret;
} }
...@@ -1519,7 +1519,7 @@ static ssize_t aio_write(struct kiocb *req, struct iocb *iocb, bool vectored, ...@@ -1519,7 +1519,7 @@ static ssize_t aio_write(struct kiocb *req, struct iocb *iocb, bool vectored,
if (!ret) { if (!ret) {
req->ki_flags |= IOCB_WRITE; req->ki_flags |= IOCB_WRITE;
file_start_write(file); file_start_write(file);
ret = aio_ret(req, file->f_op->write_iter(req, &iter)); ret = aio_ret(req, call_write_iter(file, req, &iter));
/* /*
* We release freeze protection in aio_complete(). Fool lockdep * We release freeze protection in aio_complete(). Fool lockdep
* by telling it the lock got released so that it doesn't * by telling it the lock got released so that it doesn't
......
...@@ -367,7 +367,7 @@ ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos) ...@@ -367,7 +367,7 @@ ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos)
kiocb.ki_pos = *ppos; kiocb.ki_pos = *ppos;
iter->type |= READ; iter->type |= READ;
ret = file->f_op->read_iter(&kiocb, iter); ret = call_read_iter(file, &kiocb, iter);
BUG_ON(ret == -EIOCBQUEUED); BUG_ON(ret == -EIOCBQUEUED);
if (ret > 0) if (ret > 0)
*ppos = kiocb.ki_pos; *ppos = kiocb.ki_pos;
...@@ -387,7 +387,7 @@ ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos) ...@@ -387,7 +387,7 @@ ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos)
kiocb.ki_pos = *ppos; kiocb.ki_pos = *ppos;
iter->type |= WRITE; iter->type |= WRITE;
ret = file->f_op->write_iter(&kiocb, iter); ret = call_write_iter(file, &kiocb, iter);
BUG_ON(ret == -EIOCBQUEUED); BUG_ON(ret == -EIOCBQUEUED);
if (ret > 0) if (ret > 0)
*ppos = kiocb.ki_pos; *ppos = kiocb.ki_pos;
...@@ -436,7 +436,7 @@ static ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, lo ...@@ -436,7 +436,7 @@ static ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, lo
kiocb.ki_pos = *ppos; kiocb.ki_pos = *ppos;
iov_iter_init(&iter, READ, &iov, 1, len); iov_iter_init(&iter, READ, &iov, 1, len);
ret = filp->f_op->read_iter(&kiocb, &iter); ret = call_read_iter(filp, &kiocb, &iter);
BUG_ON(ret == -EIOCBQUEUED); BUG_ON(ret == -EIOCBQUEUED);
*ppos = kiocb.ki_pos; *ppos = kiocb.ki_pos;
return ret; return ret;
...@@ -493,7 +493,7 @@ static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t ...@@ -493,7 +493,7 @@ static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t
kiocb.ki_pos = *ppos; kiocb.ki_pos = *ppos;
iov_iter_init(&iter, WRITE, &iov, 1, len); iov_iter_init(&iter, WRITE, &iov, 1, len);
ret = filp->f_op->write_iter(&kiocb, &iter); ret = call_write_iter(filp, &kiocb, &iter);
BUG_ON(ret == -EIOCBQUEUED); BUG_ON(ret == -EIOCBQUEUED);
if (ret > 0) if (ret > 0)
*ppos = kiocb.ki_pos; *ppos = kiocb.ki_pos;
...@@ -690,9 +690,9 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter, ...@@ -690,9 +690,9 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter,
kiocb.ki_pos = *ppos; kiocb.ki_pos = *ppos;
if (type == READ) if (type == READ)
ret = filp->f_op->read_iter(&kiocb, iter); ret = call_read_iter(filp, &kiocb, iter);
else else
ret = filp->f_op->write_iter(&kiocb, iter); ret = call_write_iter(filp, &kiocb, iter);
BUG_ON(ret == -EIOCBQUEUED); BUG_ON(ret == -EIOCBQUEUED);
*ppos = kiocb.ki_pos; *ppos = kiocb.ki_pos;
return ret; return ret;
......
...@@ -306,7 +306,7 @@ ssize_t generic_file_splice_read(struct file *in, loff_t *ppos, ...@@ -306,7 +306,7 @@ ssize_t generic_file_splice_read(struct file *in, loff_t *ppos,
idx = to.idx; idx = to.idx;
init_sync_kiocb(&kiocb, in); init_sync_kiocb(&kiocb, in);
kiocb.ki_pos = *ppos; kiocb.ki_pos = *ppos;
ret = in->f_op->read_iter(&kiocb, &to); ret = call_read_iter(in, &kiocb, &to);
if (ret > 0) { if (ret > 0) {
*ppos = kiocb.ki_pos; *ppos = kiocb.ki_pos;
file_accessed(in); file_accessed(in);
......
...@@ -1715,6 +1715,18 @@ struct inode_operations { ...@@ -1715,6 +1715,18 @@ struct inode_operations {
int (*set_acl)(struct inode *, struct posix_acl *, int); int (*set_acl)(struct inode *, struct posix_acl *, int);
} ____cacheline_aligned; } ____cacheline_aligned;
static inline ssize_t call_read_iter(struct file *file, struct kiocb *kio,
struct iov_iter *iter)
{
return file->f_op->read_iter(kio, iter);
}
static inline ssize_t call_write_iter(struct file *file, struct kiocb *kio,
struct iov_iter *iter)
{
return file->f_op->write_iter(kio, iter);
}
ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
unsigned long nr_segs, unsigned long fast_segs, unsigned long nr_segs, unsigned long fast_segs,
struct iovec *fast_pointer, struct iovec *fast_pointer,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment