Re: [PATCH] __free_pages_ok oops

From: Daniel Phillips (phillips@bonn-fries.net)
Date: Thu Feb 07 2002 - 08:55:37 EST


On February 7, 2002 02:27 pm, Rik van Riel wrote:
> On Thu, 7 Feb 2002, Hugh Dickins wrote:
>
> > > if (PageLRU(page)) {
> > > if (in_interrupt()) {
> > > add_page_to_special_list(page);
> > > return;
> > > } else
> > > lru_cache_del(page);
> > > }
> >
> > If this were a common case where many pages end up, yes, we'd
> > need a separate special list; but it's a very rare case
>
> Think of a web or ftp server doing nothing but sendfile()

But still, you're

> > I was proposing we revert to distinguishing page_cache_release
> > from put_page, page_cache_release doing the lru_cache_del; and
> > I'd like to add my in_interrupt() BUG() there for now, just as
> > a sanity check. You are proposing that we keep the current,
> > post-Ben, structure of doing it in __free_pages_ok if possible.
>
> So how exactly would pages be freed ?
> You still need to do the check of whether the page can
> be freed somewhere.

He suggested letting shrink_caches find it. But since we already know the
page is free there's no sense scanning for it, so on balance I think your
approach is better. An atomic_put_page, used from any context that could end
up in an interrupt, would be better yet, just because it imposes the extra
check only on users that require it. Otoh, I did note davem's objection
above.

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



This archive was generated by hypermail 2b29 : Thu Feb 07 2002 - 21:01:01 EST