On Sun, Feb 11, 2018 at 9:02 AM, Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > On Sat, Feb 10, 2018 at 10:04:23AM -0800, Joe Perches wrote: >> > @@ -120,14 +120,12 @@ static int traverse(struct seq_file *m, loff_t offset) >> > if (pos + m->count > offset) { >> > m->from = offset - pos; >> > m->count -= m->from; >> > - m->index = index; >> > break; >> > } >> > pos += m->count; >> > m->count = 0; >> > if (pos == offset) { >> > index++; >> > - m->index = index; >> > break; >> > } >> > p = m->op->next(m, p, &index); >> >> Of course this looks correct, but how >> are you _absolutely sure_ about this? >> >> Perhaps the m->op->stop(m, p) call below >> the break, which takes m as an argument, >> needs an updated m->index. > > Not only that, but ->next might also look at m->index. I think there is no chance to call op->next, because the loop will break immediately after the assignment.