On Mon, Nov 28, 2016 at 4:11 PM, Tomasz Majchrzak <tomasz.majchr...@intel.com> wrote: > If kernfs file is empty on a first read, successive read operations > using the same file descriptor will return no data, even when data is > available. Default kernfs 'seq_next' implementation advances iterator > position even when next object is not there. Kernfs 'seq_start' for > following requests will not return iterator as position is already on > the second object. > > This defect doesn't allow to monitor badblocks sysfs files from MD raid. > They are initially empty but if data appears at some stage, userspace is > not able to read it. > > Signed-off-by: Tomasz Majchrzak <tomasz.majchr...@intel.com>
A comment above the check wouldn't hurt. Otherwise Acked-by: Miklos Szeredi <mszer...@redhat.com> > --- > fs/seq_file.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fs/seq_file.c b/fs/seq_file.c > index 368bfb9..ee21714 100644 > --- a/fs/seq_file.c > +++ b/fs/seq_file.c > @@ -190,6 +190,9 @@ ssize_t seq_read(struct file *file, char __user *buf, > size_t size, loff_t *ppos) > */ > m->version = file->f_version; > > + if (*ppos == 0) > + m->index = 0; > + > /* Don't assume *ppos is where we left it */ > if (unlikely(*ppos != m->read_pos)) { > while ((err = traverse(m, *ppos)) == -EAGAIN) > -- > 1.8.3.1 >