lkml.org 
[lkml]   [2020]   [Jun]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/9] fs: refactor new_sync_read
    Date
    Pass the read_iter method as a parameter and mark the function
    non-static. This allows reusing it for additional callsites e.g.
    in procfs.

    Signed-off-by: Christoph Hellwig <hch@lst.de>
    ---
    fs/read_write.c | 8 +++++---
    include/linux/fs.h | 2 ++
    2 files changed, 7 insertions(+), 3 deletions(-)

    diff --git a/fs/read_write.c b/fs/read_write.c
    index e7f36b15683049..e765c95ff3440d 100644
    --- a/fs/read_write.c
    +++ b/fs/read_write.c
    @@ -401,7 +401,8 @@ int rw_verify_area(int read_write, struct file *file, const loff_t *ppos, size_t
    read_write == READ ? MAY_READ : MAY_WRITE);
    }

    -static ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos)
    +ssize_t iter_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos,
    + ssize_t (*cb)(struct kiocb *iocb, struct iov_iter *iter))
    {
    struct iovec iov = { .iov_base = buf, .iov_len = len };
    struct kiocb kiocb;
    @@ -412,7 +413,7 @@ static ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, lo
    kiocb.ki_pos = (ppos ? *ppos : 0);
    iov_iter_init(&iter, READ, &iov, 1, len);

    - ret = call_read_iter(filp, &kiocb, &iter);
    + ret = cb(&kiocb, &iter);
    BUG_ON(ret == -EIOCBQUEUED);
    if (ppos)
    *ppos = kiocb.ki_pos;
    @@ -488,7 +489,8 @@ ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
    if (file->f_op->read)
    ret = file->f_op->read(file, buf, count, pos);
    else if (file->f_op->read_iter)
    - ret = new_sync_read(file, buf, count, pos);
    + ret = iter_read(file, buf, count, pos,
    + file->f_op->read_iter);
    else
    ret = -EINVAL;
    if (ret > 0) {
    diff --git a/include/linux/fs.h b/include/linux/fs.h
    index fac6aead402a98..b9b2ee31ef9bf1 100644
    --- a/include/linux/fs.h
    +++ b/include/linux/fs.h
    @@ -1916,6 +1916,8 @@ 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,
    struct iovec **ret_pointer);
    +ssize_t iter_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos,
    + ssize_t (*cb)(struct kiocb *iocb, struct iov_iter *iter));

    extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
    extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-06-26 10:00    [W:2.318 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site