[PATCH] mm: zap_pte_range dont dirty anon
zap_pte_range already avoids wasting time to mark_page_accessed on anon pages: it can also skip anon set_page_dirty - the page only needs to be marked dirty if shared with another mm, but that will say pte_dirty too. Signed-off-by: Hugh Dickins <hugh@veritas.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
0c942a4539
commit
6237bcd948
10
mm/memory.c
10
mm/memory.c
@@ -574,12 +574,14 @@ static void zap_pte_range(struct mmu_gather *tlb, pmd_t *pmd,
|
|||||||
addr) != page->index)
|
addr) != page->index)
|
||||||
set_pte_at(tlb->mm, addr, pte,
|
set_pte_at(tlb->mm, addr, pte,
|
||||||
pgoff_to_pte(page->index));
|
pgoff_to_pte(page->index));
|
||||||
if (pte_dirty(ptent))
|
|
||||||
set_page_dirty(page);
|
|
||||||
if (PageAnon(page))
|
if (PageAnon(page))
|
||||||
dec_mm_counter(tlb->mm, anon_rss);
|
dec_mm_counter(tlb->mm, anon_rss);
|
||||||
else if (pte_young(ptent))
|
else {
|
||||||
mark_page_accessed(page);
|
if (pte_dirty(ptent))
|
||||||
|
set_page_dirty(page);
|
||||||
|
if (pte_young(ptent))
|
||||||
|
mark_page_accessed(page);
|
||||||
|
}
|
||||||
tlb->freed++;
|
tlb->freed++;
|
||||||
page_remove_rmap(page);
|
page_remove_rmap(page);
|
||||||
tlb_remove_page(tlb, page);
|
tlb_remove_page(tlb, page);
|
||||||
|
Reference in New Issue
Block a user