Messages in this thread Patch in this message | | | From | "Jason A. Donenfeld" <> | Subject | [PATCH] char/mem: only use {read,write}_iter, not the old {read,write} functions | Date | Fri, 20 May 2022 15:50:30 +0200 |
| |
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
| |