public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] /dev/zero: also implement ->read
@ 2020-09-03 15:59 Christoph Hellwig
  2020-09-03 16:05 ` Christophe Leroy
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Christoph Hellwig @ 2020-09-03 15:59 UTC (permalink / raw)
  To: arnd, gregkh; +Cc: christophe.leroy, linux-kernel

Christophe reported a major speedup due to avoiding the iov_iter
overhead, so just add this trivial function.  Note that /dev/zero
already implements both an iter and non-iter writes so this just
makes it more symmetric.

Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/char/mem.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/drivers/char/mem.c b/drivers/char/mem.c
index abd4ffdc8cdebc..1dc99ab158457a 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -726,6 +726,27 @@ 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);
+
+		if (clear_user(buf + cleared, chunk))
+			return cleared ? cleared : -EFAULT;
+		cleared += chunk;
+		count -= chunk;
+
+		if (signal_pending(current))
+			return cleared ? cleared : -ERESTARTSYS;
+		cond_resched();
+	}
+
+	return cleared;
+}
+
 static int mmap_zero(struct file *file, struct vm_area_struct *vma)
 {
 #ifndef CONFIG_MMU
@@ -921,6 +942,7 @@ 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.28.0


^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2020-09-07  8:18 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-09-03 15:59 [PATCH] /dev/zero: also implement ->read Christoph Hellwig
2020-09-03 16:05 ` Christophe Leroy
2020-09-03 21:35   ` David Laight
2020-09-06 18:21     ` Pavel Machek
2020-09-06 18:35       ` Christophe Leroy
2020-09-06 18:38         ` Pavel Machek
2020-09-06 18:47           ` Christophe Leroy
2020-09-06 20:09           ` gregkh
2020-09-06 20:52         ` David Laight
2020-09-07  4:44           ` Christophe Leroy
2020-09-07  8:18             ` David Laight
2020-09-03 17:51 ` Christophe Leroy
2020-09-03 18:02   ` Greg KH
2020-09-06 22:34 ` Rasmus Villemoes
2020-09-07  6:20   ` Christoph Hellwig
2020-09-07  6:50     ` Rasmus Villemoes
2020-09-07  7:30       ` Christoph Hellwig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox