mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-23 08:35:19 -05:00
vfs: use helpers for calling f_op->{read,write}_iter()
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
0f78d06ac1
commit
bb7462b6fd
5 changed files with 23 additions and 11 deletions
|
@ -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);
|
||||||
|
|
4
fs/aio.c
4
fs/aio.c
|
@ -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,
|
||||||
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)
|
||||||
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)
|
||||||
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
|
||||||
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
|
||||||
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,
|
||||||
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,
|
||||||
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 {
|
||||||
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,
|
||||||
|
|
Loading…
Add table
Reference in a new issue