On Mon, 18 Sep 2000, Alexander Viro wrote:
> > 
> > but should instead be
> > 
> >     static int make_buffer_uptodate(struct page *page, struct buffer_head * bh)
> >     {
> >             if (Page_Uptodate(page)) {
>                   ^^^^^^^^^^^^^^^^^^^
> >                     set_bit(BH_Uptodate, &bh->b_state);
> >                     return;
> >             }
> >             ll_rw_block(READ, 1, &bh);
> >     }
> 
> > Forget about your "stage 1" and "stage 2" complications. They shouldn't
>                                 ^^^^^^^^^^
> > exist.
> 
>       Erm...

No, but that's just because you _think_ about the problem the wrong way
around.

If you think about it like the above, it's not a "stage" at all. It's just
part of getting the buffer to be up-to-date.

Very logical, very simple, no "fscking mess" at all.

That's my argument. You're trying to make it a problem. It's not. It's
something new with the page cache, yes - the fact that the page cache
drives the logic means that the buffer "uptodate" logic is different, but
if you think about it some, you'll realize that that's actually just a
natural outgrowth of the fact that the buffer cache is slaved to the page
cache these days. 

It's not a "stage 2". It's a basic fact of life - we don't care _how_ the
page got to be up-to-date, because for all we know there are other ways to
get it to be up-to-date than your "stage 1". 

For example, a recvfile() implementation could mark the page up-to-date by
virtue of getting the information off the network. No "stage 1" or "stage
2" there at all: the make_buffer_uptodate() logic does _not_ mean that we
lost the buffers from "stage 1", it might equally well mean that we got
the page up-to-date through some other means.

Just change how you think about the problem, and suddenly it's not a mess,
it's a design.

                Linus

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to