Messages in this thread | | | Date | Thu, 3 Sep 2020 20:02:17 +0200 | From | Greg KH <> | Subject | Re: [PATCH] /dev/zero: also implement ->read |
| |
On Thu, Sep 03, 2020 at 07:51:07PM +0200, Christophe Leroy wrote: > > > Le 03/09/2020 à 17:59, Christoph Hellwig a écrit : > > 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, > > Wondering if .read should be before .write, so that we get in order read, > write, read_iter, write_iter.
It really does not matter :)
thanks,
greg k-h
| |