mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
[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:
parent
e236a166b2
commit
053837fce7
7 changed files with 76 additions and 75 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue