Re: mm: BUG: Bad page state in process ksmd

From: Sasha Levin
Date: Wed Mar 26 2014 - 17:40:16 EST


On 03/26/2014 03:55 PM, Andrew Morton wrote:
On Wed, 26 Mar 2014 11:13:27 -0400 Sasha Levin <sasha.levin@xxxxxxxxxx> wrote:
Out of curiosity, is there a reason not to do bad flag checks when actually
setting flag? Obviously it'll be slower but it'll be easier catching these
issues.

Tricky. Each code site must determine what are and are not valid page
states depending upon the current context. The one place where we've
made that effort is at the point where a page is returned to the free
page pool. Any other sites would require similar amounts of effort and
each one would be different from all the others.

We do this in a small way all over the place, against individual page
flags. grep PageLocked */*.c.

What if we define generic page types and group page flags under them?
It would be easier to put these checks in key sites around the code
and no need to fully customize them to each site.

For exmaple, swap_readpage() is doing this:

VM_BUG_ON_PAGE(!PageLocked(page), page);
VM_BUG_ON_PAGE(PageUptodate(page), page);

But what if instead of that we'd do:

VM_BUG_ON_PAGE(!PageSwap(page), page);

Where PageSwap would test "not locked", "uptodate", and in addition
a set of "sanity" flags which it didn't make sense to test individually
everywhere (PageError()? PageReclaim()?).

I can add the infrastructure if that sounds good (and people promise to
work with me on defining page types). I'd be happy to do all the testing
involved in getting this to work right.


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