mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
rmap: add exclusive page to private anon_vma on swapin
On swapin it is fairly common for a page to be owned exclusively by one process. In that case we want to add the page to the anon_vma of that process's VMA, instead of to the root anon_vma. This will reduce the amount of rmap searching that the swapout code needs to do. Signed-off-by: Rik van Riel <[email protected]> Cc: Andrea Arcangeli <[email protected]> Cc: KOSAKI Motohiro <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
51b1bd2ace
commit
ad8c2ee801
3 changed files with 17 additions and 2 deletions
13
mm/rmap.c
13
mm/rmap.c
|
|
@ -829,6 +829,17 @@ static void __page_check_anon_rmap(struct page *page,
|
|||
*/
|
||||
void page_add_anon_rmap(struct page *page,
|
||||
struct vm_area_struct *vma, unsigned long address)
|
||||
{
|
||||
do_page_add_anon_rmap(page, vma, address, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Special version of the above for do_swap_page, which often runs
|
||||
* into pages that are exclusively owned by the current process.
|
||||
* Everybody else should continue to use page_add_anon_rmap above.
|
||||
*/
|
||||
void do_page_add_anon_rmap(struct page *page,
|
||||
struct vm_area_struct *vma, unsigned long address, int exclusive)
|
||||
{
|
||||
int first = atomic_inc_and_test(&page->_mapcount);
|
||||
if (first)
|
||||
|
|
@ -839,7 +850,7 @@ void page_add_anon_rmap(struct page *page,
|
|||
VM_BUG_ON(!PageLocked(page));
|
||||
VM_BUG_ON(address < vma->vm_start || address >= vma->vm_end);
|
||||
if (first)
|
||||
__page_set_anon_rmap(page, vma, address, 0);
|
||||
__page_set_anon_rmap(page, vma, address, exclusive);
|
||||
else
|
||||
__page_check_anon_rmap(page, vma, address);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue