Re: [PATCH] 2.2.17pre9 interactiveness under high IO

From: Marcelo Tosatti (marcelo@conectiva.com.br)
Date: Sun Jul 02 2000 - 18:53:34 EST


On 3 Jul 2000, Juan J. Quintela wrote:

> >>>>> "marcelo" == Marcelo Tosatti <marcelo@conectiva.com.br> writes:
>
> marcelo> On Mon, 3 Jul 2000, Jens Axboe wrote:
> >> On Sat, Jul 01 2000, Marcelo Tosatti wrote:
> >> > Hi,
> >> >
> >> > This silly patch avoids that by making ll_rw_block() ignore the IO if the
> >> > request queue is full, causing the process to search for more freeable
> >> > pages instead blocking.
> >> >
> >> > --- fs/buffer.c.orig Sat Jul 1 20:49:19 2000
> >> > +++ fs/buffer.c Sat Jul 1 20:28:36 2000
> >> > @@ -1517,7 +1517,7 @@
> >> > if (wait)
> >> > __wait_on_buffer(p);
> >> > } else if (buffer_dirty(p))
> >> > - ll_rw_block(WRITE, 1, &p);
> >> > + ll_rw_block(WRITEA, 1, &p);
> >> > } while (tmp != bh);
> >> >
> >> > do {
> >>
> >> This is wrong -- if the buffer is not queued because we are out of
> >> free request slots, it has still already been locked at this point
> >> (and _Req).
>
> marcelo> if (!req) {
> marcelo> if (rw_ahead)
> marcelo> goto end_io;
> marcelo> req = __get_request_wait(max_req, bh->b_rdev);
> marcelo> }
>
> marcelo> In case we fail to find a free request, bh->b_end_io is called, and
> marcelo> it unlocks the buffer.
>
> Think what can happen if bh->b_end_io is set as _async handler, it
> wolud unlock the buffer and more things that you don't want posibly
> for it to do.

It never happens.
We try to sync buffers which are on the page->buffers list, and those
buffers use the sync handler.
The async handler is only used for page IO.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Jul 07 2000 - 21:00:11 EST