Re: [PATCH] [13/16] POISON: The high level memory error handler in the VM

Andi Kleen
2009-04-09T07:27:38Z

On Wed, Apr 08, 2009 at 01:03:59PM -0400, Chris Mason wrote:

Hi Chris,

Thanks for the review.

> So, try_to_release_page returns 1 when it works. I know this only
> because I have to read it every time to remember ;)

Argh. I think I read that, but then somehow the code still came out
wrong and the tester didn't catch the failure.

>
> try_to_release_page is also very likely to fail if the page is dirty or
> under writeback. At the end of the day, we'll probably need a call into

Would you recommend a retry step? If it fails cancel_dirty_page() and then
retry?

Ideally I would like to stop the write back before it starts (it will
result in a hardware bus abort or even a machine check if the CPU
touches the data), but I realize it's difficult for anything with
private page state. I just cancel dirty for !Private at least.

> the FS to tell it a given page isn't coming back, and to clean it at all
> cost.
>
> invalidatepage is close, but ext3/reiserfs will keep the buffer heads
> and let the page->mapping go to null in an ugly data=ordered corner
> case. The buffer heads pin the page and it won't be freed until the IO
> is done.

invalidate_mapping_pages() ?

I had this in an earlier version, but took it out because it seemed
problematic to rely on a specific inode. Should i reconsider it?

-Andi
--
ak@linux.intel.com -- Speaking for myself only.