mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
mm: softdirty: make freshly remapped file pages being softdirty unconditionally
Hugh reported: | I noticed your soft_dirty work in install_file_pte(): which looked | good at first, until I realized that it's propagating the soft_dirty | of a pte it's about to zap completely, to the unrelated entry it's | about to insert in its place. Which seems very odd to me. Indeed this code ends up being nop in result -- pte_file_mksoft_dirty() operates with pte_t argument and returns new pte_t which were never used after. After looking more I think what we need is to soft-dirtify all newely remapped file pages because it should look like a new mapping for memory tracker. Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> Reported-by: Hugh Dickins <hughd@google.com> Cc: Pavel Emelyanov <xemul@parallels.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
52383431b3
commit
0bf073315c
@ -82,13 +82,10 @@ static int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
|
||||
ptfile = pgoff_to_pte(pgoff);
|
||||
|
||||
if (!pte_none(*pte)) {
|
||||
if (pte_present(*pte) && pte_soft_dirty(*pte))
|
||||
pte_file_mksoft_dirty(ptfile);
|
||||
if (!pte_none(*pte))
|
||||
zap_pte(mm, vma, addr, pte);
|
||||
}
|
||||
|
||||
set_pte_at(mm, addr, pte, ptfile);
|
||||
set_pte_at(mm, addr, pte, pte_file_mksoft_dirty(ptfile));
|
||||
/*
|
||||
* We don't need to run update_mmu_cache() here because the "file pte"
|
||||
* being installed by install_file_pte() is not a real pte - it's a
|
||||
|
Loading…
Reference in New Issue
Block a user