[PATCH] mm: migration page refcounting fix
Migration code currently does not take a reference to target page properly, so between unlocking the pte and trying to take a new reference to the page with isolate_lru_page, anything could happen to it. Fix this by holding the pte lock until we get a chance to elevate the refcount. Other small cleanups while we're here. Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:

committed by
Linus Torvalds

parent
e236a166b2
commit
053837fce7
@@ -39,24 +39,3 @@ del_page_from_lru(struct zone *zone, struct page *page)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Isolate one page from the LRU lists.
|
||||
*
|
||||
* - zone->lru_lock must be held
|
||||
*/
|
||||
static inline int __isolate_lru_page(struct page *page)
|
||||
{
|
||||
if (unlikely(!TestClearPageLRU(page)))
|
||||
return 0;
|
||||
|
||||
if (get_page_testone(page)) {
|
||||
/*
|
||||
* It is being freed elsewhere
|
||||
*/
|
||||
__put_page(page);
|
||||
SetPageLRU(page);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user