Re: free_swap_and_cache() doubt

Hugh Dickins (hugh@veritas.com)
Mon, 21 Jan 2002 00:15:49 +0000 (GMT)


On Sat, 19 Jan 2002 alad@hss.hns.com wrote:
> I am reading 2.4.16, let us assume following scenario
>
> swap_map[offset] == 2;
> and page->count == 2; (before function execution)
> vm_swap is full (nr_swap_pages*2 > total_swap_pages);
>
> first question is the above case possible.

Yes.

> if yes, then
> after execution of this function, we would have page->count == 1, i.e.
> mapped by some process, with good page->index and what we have is, the
> associated swap entry is already freed.
>
> Am i wrong somewhere ??

The only place you are wrong is in using the word "good" of page->index
at the end, and indeed I think your point is that it's not good. It is
not good, it is stale, but that's okay because page->mapping has been
set to NULL, and page->index has no meaning without page->mapping.

You'll notice that __free_pages_ok() contains many BUG() hurdles
(including check on page->mapping and redundant check on PageSwapCache)
but doesn't mind if page->index is non-zero.

But thanks for making me look at this function, there
is a bug there and I'll post a patch for it right now...

Hugh

-
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/