vfs: use helpers for calling f_op->{read,write}_iter()
authorMiklos Szeredi <mszeredi@redhat.com>
Mon, 20 Feb 2017 15:51:23 +0000 (16:51 +0100)
committerMiklos Szeredi <mszeredi@redhat.com>
Mon, 20 Feb 2017 15:51:23 +0000 (16:51 +0100)
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
drivers/block/loop.c
fs/aio.c
fs/read_write.c
fs/splice.c
include/linux/fs.h

index f347285c67ec1151d0d725842eed84ba2231f760..2cf2903a0715042129345010c127d794f4d06aa4 100644 (file)
@@ -501,9 +501,9 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd,
        cmd->iocb.ki_flags = IOCB_DIRECT;
 
        if (rw == WRITE)
-               ret = file->f_op->write_iter(&cmd->iocb, &iter);
+               ret = call_write_iter(file, &cmd->iocb, &iter);
        else
-               ret = file->f_op->read_iter(&cmd->iocb, &iter);
+               ret = call_read_iter(file, &cmd->iocb, &iter);
 
        if (ret != -EIOCBQUEUED)
                cmd->iocb.ki_complete(&cmd->iocb, ret, 0);
index 4ab67e8cb776ac18fd12bfec2fa7816800f3f5fa..9f4a9a2e7ae4c361ae9744057bad269832aa3f11 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1494,7 +1494,7 @@ static ssize_t aio_read(struct kiocb *req, struct iocb *iocb, bool vectored,
                return ret;
        ret = rw_verify_area(READ, file, &req->ki_pos, iov_iter_count(&iter));
        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);
        return ret;
 }
@@ -1519,7 +1519,7 @@ static ssize_t aio_write(struct kiocb *req, struct iocb *iocb, bool vectored,
        if (!ret) {
                req->ki_flags |= IOCB_WRITE;
                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
                 * by telling it the lock got released so that it doesn't
index 198614f757fa464cc7aa087e554605cd8e8c2366..f2ed9fdc98fdea5fdc681a611581970d1f433c82 100644 (file)
@@ -367,7 +367,7 @@ ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos)
        kiocb.ki_pos = *ppos;
 
        iter->type |= READ;
-       ret = file->f_op->read_iter(&kiocb, iter);
+       ret = call_read_iter(file, &kiocb, iter);
        BUG_ON(ret == -EIOCBQUEUED);
        if (ret > 0)
                *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;
 
        iter->type |= WRITE;
-       ret = file->f_op->write_iter(&kiocb, iter);
+       ret = call_write_iter(file, &kiocb, iter);
        BUG_ON(ret == -EIOCBQUEUED);
        if (ret > 0)
                *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;
        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);
        *ppos = kiocb.ki_pos;
        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;
        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);
        if (ret > 0)
                *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;
 
        if (type == READ)
-               ret = filp->f_op->read_iter(&kiocb, iter);
+               ret = call_read_iter(filp, &kiocb, iter);
        else
-               ret = filp->f_op->write_iter(&kiocb, iter);
+               ret = call_write_iter(filp, &kiocb, iter);
        BUG_ON(ret == -EIOCBQUEUED);
        *ppos = kiocb.ki_pos;
        return ret;
index 873d83104e79aed14a24c417f211e38ae4038122..6518f058bd7f3a38d736be5dd9e4e266fe2cb7a2 100644 (file)
@@ -306,7 +306,7 @@ ssize_t generic_file_splice_read(struct file *in, loff_t *ppos,
        idx = to.idx;
        init_sync_kiocb(&kiocb, in);
        kiocb.ki_pos = *ppos;
-       ret = in->f_op->read_iter(&kiocb, &to);
+       ret = call_read_iter(in, &kiocb, &to);
        if (ret > 0) {
                *ppos = kiocb.ki_pos;
                file_accessed(in);
index 78c81e6f5d76f72fb24bb1f583635953fd3f9d74..a3145cdff8f261956033da3fc453ae478809188e 100644 (file)
@@ -1715,6 +1715,18 @@ struct inode_operations {
        int (*set_acl)(struct inode *, struct posix_acl *, int);
 } ____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,
                              unsigned long nr_segs, unsigned long fast_segs,
                              struct iovec *fast_pointer,