Re: Linux-2.4.5

Andrea Arcangeli
2001-05-26T15:31:35Z

On Sat, May 26, 2001 at 12:22:59PM -0300, Rik van Riel wrote:
> On Sat, 26 May 2001, Andrea Arcangeli wrote:
>
> > @@ -1416,11 +1416,9 @@
> > */
> > run_task_queue(&tq_disk);
> >
> > - /*
> > - * Set our state for sleeping, then check again for buffer heads.
> > - * This ensures we won't miss a wake_up from an interrupt.
> > - */
> > - wait_event(buffer_wait, nr_unused_buffer_heads >= MAX_BUF_PER_PAGE);
> > + current->policy |= SCHED_YIELD;
> > + __set_current_state(TASK_RUNNING);
> > + schedule();
> > goto try_again;
> > }
>
> This cannot possibly fix the problem because this code is
> never reached.
>
> What was observed in the backtraces by arjan, ben, marcelo
> and people at IBM was:
>
> create_buffers -> get_unused_buffer_head -> __alloc_pages
>
> with the system looping infinitely in __alloc_pages. The
> code you are changing above ONLY gets reached in case the
> __alloc_pages (and thus, get_unused_buffer_head) returns
> failure.

Fine, then post the strict __alloc_pages patch, after that you will run
into the above code. Those are different issues, like I'm claiming since
the first place, your patch didn't addressed the above.

I definitely agree that if __alloc_pages itself deadlocks the above
cannot make differences.

Andrea