mm, thp: do not queue fully unmapped pages for deferred split
Adding fully unmapped pages into deferred split queue is not productive: these pages are about to be freed or they are pinned and cannot be split anyway. Link: http://lkml.kernel.org/r/20190913091849.11151-1-kirill.shutemov@linux.intel.com Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Reviewed-by: Yang Shi <yang.shi@linux.alibaba.com> Cc: Michal Hocko <mhocko@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
74d4a5797b
commit
f1fe80d4ae
14
mm/rmap.c
14
mm/rmap.c
@ -1292,12 +1292,20 @@ static void page_remove_anon_compound_rmap(struct page *page)
|
||||
if (TestClearPageDoubleMap(page)) {
|
||||
/*
|
||||
* Subpages can be mapped with PTEs too. Check how many of
|
||||
* themi are still mapped.
|
||||
* them are still mapped.
|
||||
*/
|
||||
for (i = 0, nr = 0; i < HPAGE_PMD_NR; i++) {
|
||||
if (atomic_add_negative(-1, &page[i]._mapcount))
|
||||
nr++;
|
||||
}
|
||||
|
||||
/*
|
||||
* Queue the page for deferred split if at least one small
|
||||
* page of the compound page is unmapped, but at least one
|
||||
* small page is still mapped.
|
||||
*/
|
||||
if (nr && nr < HPAGE_PMD_NR)
|
||||
deferred_split_huge_page(page);
|
||||
} else {
|
||||
nr = HPAGE_PMD_NR;
|
||||
}
|
||||
@ -1305,10 +1313,8 @@ static void page_remove_anon_compound_rmap(struct page *page)
|
||||
if (unlikely(PageMlocked(page)))
|
||||
clear_page_mlock(page);
|
||||
|
||||
if (nr) {
|
||||
if (nr)
|
||||
__mod_node_page_state(page_pgdat(page), NR_ANON_MAPPED, -nr);
|
||||
deferred_split_huge_page(page);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user