On Sun, Feb 11, 2018 at 9:02 AM, Matthew Wilcox <wi...@infradead.org> 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.

Reply via email to