The patch titled seq_file(): fix bug when seq_read() reads nothing has been removed from the -mm tree. Its filename was seq_file-fix-bug-when-seq_read-reads-nothing.patch This patch was dropped because an alternative patch was merged The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: seq_file(): fix bug when seq_read() reads nothing From: Bian Naimeng <biannm@xxxxxxxxxxxxxx> When I used seq_file to read a proc file, I got a bug in seq_read(). If show() skips the first element or the size of first element is 0, and the size of second element is larger than the seq_file->size at the same time, seq_read will return 0, so nothing can be read from the proc file. So, if seq_read() returns because it finds the element is bigger than the m->buf, it must make sure that either some date was filled to m->buf by show(), or some data was flushed to the user buf beforehand. If not, it should increase the m->buf until it can read this element. [akpm@xxxxxxxxxxxxxxxxxxxx: fix comment] Signed-off-by: Bian Naimeng <biannm@xxxxxxxxxxxxxx> Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/seq_file.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff -puN fs/seq_file.c~seq_file-fix-bug-when-seq_read-reads-nothing fs/seq_file.c --- a/fs/seq_file.c~seq_file-fix-bug-when-seq_read-reads-nothing +++ a/fs/seq_file.c @@ -107,6 +107,7 @@ ssize_t seq_read(struct file *file, char if (!size) goto Done; } +First_record: /* we need at least one record in buffer */ while (1) { pos = m->index; @@ -145,8 +146,18 @@ Fill: err = m->op->show(m, p); if (m->count == m->size || err) { m->count = offs; - if (likely(err <= 0)) + if (err < 0) break; + /* + * If no data was flushed to the user buf and nothing + * was read by show() beforehand, we should advance the + * m->buf until it can read this element. + */ + if (err == 0 && m->count == 0 && copied == 0) { + m->index = next; + m->op->stop(m, p); + goto First_record; + } } pos = next; } _ Patches currently in -mm which might be from biannm@xxxxxxxxxxxxxx are seq_file-fix-bug-when-seq_read-reads-nothing.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html