Messages in this thread | | | Date | Sun, 27 Sep 2009 21:22:51 +0200 | From | Nick Piggin <> | Subject | Re: [RFC][PATCH] HWPOISON: remove the unsafe __set_page_locked() |
| |
On Sun, Sep 27, 2009 at 05:26:25PM +0100, Hugh Dickins wrote: > On Sat, 26 Sep 2009, Andi Kleen wrote: > > > This is a bit tricky to do right now; you have a chicken and egg > > > problem between locking the page and pinning the inode mapping. > > > > One possibly simple solution would be to just allocate the page > > locked (GFP_LOCKED). When the allocator clears the flags it already > > modifies the state, so it could as well set the lock bit too. No > > atomics needed. And then clearing it later is also atomic free. > > That's a good idea. > > I don't particularly like adding a GFP_LOCKED just for this, and I > don't particularly like having to remember to unlock the thing on the > various(?) error paths between getting the page and adding it to cache.
God no, please no more crazy branches in the page allocator.
I'm going to resubmit my patches to allow 0-ref page allocations, so the pagecache will be able to work with those to do what we want here.
> But it is a good idea, and if doing it that way would really close a > race window which checking page->mapping (or whatever) cannot (I'm > simply not sure about that), then it would seem the best way to go.
Yep, seems reasonable: the ordering is no technical burden, and a simple comment pointing to hwpoison will keep it maintainable.
| |