linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tomasz Majchrzak <tomasz.majchrzak@intel.com>
To: linux-kernel@vger.kernel.org
Cc: miklos@szeredi.hu, dan.j.williams@intel.com,
	aleksey.obitotskiy@intel.com, pawel.baldysiak@intel.com,
	artur.paszkiewicz@intel.com, maksymilian.kunt@intel.com,
	viro@zeniv.linux.org.uk,
	Tomasz Majchrzak <tomasz.majchrzak@intel.com>
Subject: [PATCH v4] seq_file: reset iterator to first record for zero offset
Date: Tue, 29 Nov 2016 15:18:20 +0100	[thread overview]
Message-ID: <1480429100-1452-1-git-send-email-tomasz.majchrzak@intel.com> (raw)
In-Reply-To: <CAJfpegthzWq44A5R-LGUmqixQRO5xzeMo50MoyKae3LXs37a2g@mail.gmail.com>

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.majchrzak@intel.com>
Acked-by: Miklos Szeredi <mszeredi@redhat.com>
---
 fs/seq_file.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/fs/seq_file.c b/fs/seq_file.c
index 368bfb9..a11f271 100644
--- a/fs/seq_file.c
+++ b/fs/seq_file.c
@@ -190,6 +190,13 @@ ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
 	 */
 	m->version = file->f_version;
 
+	/*
+	 * if request is to read from zero offset, reset iterator to first
+	 * record as it might have been already advanced by previous requests
+	 */
+	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

      reply	other threads:[~2016-11-29 14:19 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-12 12:07 [PATCH v2][RESEND] seq_file: don't set read position for invalid iterator Tomasz Majchrzak
2016-10-26  9:17 ` Miklos Szeredi
2016-10-31  9:32   ` Tomasz Majchrzak
2016-11-02  9:11     ` Miklos Szeredi
2016-11-24 15:23       ` Tomasz Majchrzak
2016-11-24 15:39         ` Miklos Szeredi
2016-11-28 15:11           ` [PATCH v3] seq_file: reset iterator to first record for zero offset Tomasz Majchrzak
2016-11-29  9:58             ` Miklos Szeredi
2016-11-29 14:18               ` Tomasz Majchrzak [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1480429100-1452-1-git-send-email-tomasz.majchrzak@intel.com \
    --to=tomasz.majchrzak@intel.com \
    --cc=aleksey.obitotskiy@intel.com \
    --cc=artur.paszkiewicz@intel.com \
    --cc=dan.j.williams@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maksymilian.kunt@intel.com \
    --cc=miklos@szeredi.hu \
    --cc=pawel.baldysiak@intel.com \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).