|
@@ -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;
|
|
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 */
|
|
/* Don't assume *ppos is where we left it */
|
|
if (unlikely(*ppos != m->read_pos)) {
|
|
if (unlikely(*ppos != m->read_pos)) {
|
|
while ((err = traverse(m, *ppos)) == -EAGAIN)
|
|
while ((err = traverse(m, *ppos)) == -EAGAIN)
|