From: Prasanna Meda I missed the point that seq_lseek did not reset the f_version, like generic_lseek did, until Jeremy proved with an example. Signed-off-by: Prasanna Meda Signed-off-by: Andrew Morton --- 25-akpm/fs/seq_file.c | 5 +++++ 1 files changed, 5 insertions(+) diff -puN fs/seq_file.c~speedup-proc-pid-maps-fix-fix-fix-fix fs/seq_file.c --- 25/fs/seq_file.c~speedup-proc-pid-maps-fix-fix-fix-fix 2005-01-16 00:47:02.961287024 -0800 +++ 25-akpm/fs/seq_file.c 2005-01-16 00:47:02.964286568 -0800 @@ -117,6 +117,7 @@ ssize_t seq_read(struct file *file, char if (!m->buf) goto Enomem; m->count = 0; + m->version = 0; } m->op->stop(m, p); m->count = 0; @@ -173,6 +174,7 @@ static int traverse(struct seq_file *m, int error = 0; void *p; + m->version = 0; m->index = 0; m->count = m->from = 0; if (!offset) @@ -227,6 +229,7 @@ loff_t seq_lseek(struct file *file, loff long long retval = -EINVAL; down(&m->sem); + m->version = file->f_version; switch (origin) { case 1: offset += file->f_pos; @@ -240,6 +243,7 @@ loff_t seq_lseek(struct file *file, loff if (retval) { /* with extreme prejudice... */ file->f_pos = 0; + m->version = 0; m->index = 0; m->count = 0; } else { @@ -248,6 +252,7 @@ loff_t seq_lseek(struct file *file, loff } } up(&m->sem); + file->f_version = m->version; return retval; } EXPORT_SYMBOL(seq_lseek); _