lkml.org 
[lkml]   [2022]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] char/mem: only use {read,write}_iter, not the old {read,write} functions
    Date
    Currently mem.c implements both the {read,write}_iter functions and the
    {read,write} functions. But with {read,write} going away at some point
    in the future, and most kernel code made to prefer {read,write}_iter,
    there's no point in keeping around the old code. Actually, this comment
    in __kernel_read() indicates that having both might be plain wrong:

    /*
    * Also fail if ->read_iter and ->read are both wired up as that
    * implies very convoluted semantics.
    */
    if (unlikely(!file->f_op->read_iter || file->f_op->read))
    return warn_unsupported(file, "read");

    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    ---
    drivers/char/mem.c | 44 --------------------------------------------
    1 file changed, 44 deletions(-)

    diff --git a/drivers/char/mem.c b/drivers/char/mem.c
    index cc296f0823bd..0eb36b784b29 100644
    --- a/drivers/char/mem.c
    +++ b/drivers/char/mem.c
    @@ -444,18 +444,6 @@ static ssize_t write_port(struct file *file, const char __user *buf,
    return tmp-buf;
    }

    -static ssize_t read_null(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    -{
    - return 0;
    -}
    -
    -static ssize_t write_null(struct file *file, const char __user *buf,
    - size_t count, loff_t *ppos)
    -{
    - return count;
    -}
    -
    static ssize_t read_iter_null(struct kiocb *iocb, struct iov_iter *to)
    {
    return 0;
    @@ -504,33 +492,6 @@ static ssize_t read_iter_zero(struct kiocb *iocb, struct iov_iter *iter)
    return written;
    }

    -static ssize_t read_zero(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    -{
    - size_t cleared = 0;
    -
    - while (count) {
    - size_t chunk = min_t(size_t, count, PAGE_SIZE);
    - size_t left;
    -
    - left = clear_user(buf + cleared, chunk);
    - if (unlikely(left)) {
    - cleared += (chunk - left);
    - if (!cleared)
    - return -EFAULT;
    - break;
    - }
    - cleared += chunk;
    - count -= chunk;
    -
    - if (signal_pending(current))
    - break;
    - cond_resched();
    - }
    -
    - return cleared;
    -}
    -
    static int mmap_zero(struct file *file, struct vm_area_struct *vma)
    {
    #ifndef CONFIG_MMU
    @@ -640,7 +601,6 @@ static int open_port(struct inode *inode, struct file *filp)

    #define zero_lseek null_lseek
    #define full_lseek null_lseek
    -#define write_zero write_null
    #define write_iter_zero write_iter_null
    #define open_mem open_port

    @@ -658,8 +618,6 @@ static const struct file_operations __maybe_unused mem_fops = {

    static const struct file_operations null_fops = {
    .llseek = null_lseek,
    - .read = read_null,
    - .write = write_null,
    .read_iter = read_iter_null,
    .write_iter = write_iter_null,
    .splice_write = splice_write_null,
    @@ -674,9 +632,7 @@ static const struct file_operations __maybe_unused port_fops = {

    static const struct file_operations zero_fops = {
    .llseek = zero_lseek,
    - .write = write_zero,
    .read_iter = read_iter_zero,
    - .read = read_zero,
    .write_iter = write_iter_zero,
    .mmap = mmap_zero,
    .get_unmapped_area = get_unmapped_area_zero,
    --
    2.35.1
    \
     
     \ /
      Last update: 2022-05-20 15:52    [W:3.704 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site