From: Prasanna Meda <pmeda@akamai.com>

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 <pmeda@akamai.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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);
_