Commit ffa16dcb authored by Peter Feiner's avatar Peter Feiner Committed by Greg Kroah-Hartman

mm: softdirty: keep bit when zapping file pte

commit dbab31aa upstream.

This fixes the same bug as b43790ee ("mm: softdirty: don't forget to
save file map softdiry bit on unmap") and 9aed8614 ("mm/memory.c:
don't forget to set softdirty on file mapped fault") where the return
value of pte_*mksoft_dirty was being ignored.

To be sure that no other pte/pmd "mk" function return values were being
ignored, I annotated the functions in arch/x86/include/asm/pgtable.h
with __must_check and rebuilt.

The userspace effect of this bug is that the softdirty mark might be
lost if a file mapped pte get zapped.
Signed-off-by: default avatarPeter Feiner <pfeiner@google.com>
Acked-by: default avatarCyrill Gorcunov <gorcunov@openvz.org>
Cc: Pavel Emelyanov <xemul@parallels.com>
Cc: Jamie Liu <jamieliu@google.com>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 152f5bed
...@@ -1125,7 +1125,7 @@ static unsigned long zap_pte_range(struct mmu_gather *tlb, ...@@ -1125,7 +1125,7 @@ static unsigned long zap_pte_range(struct mmu_gather *tlb,
addr) != page->index) { addr) != page->index) {
pte_t ptfile = pgoff_to_pte(page->index); pte_t ptfile = pgoff_to_pte(page->index);
if (pte_soft_dirty(ptent)) if (pte_soft_dirty(ptent))
pte_file_mksoft_dirty(ptfile); ptfile = pte_file_mksoft_dirty(ptfile);
set_pte_at(mm, addr, pte, ptfile); set_pte_at(mm, addr, pte, ptfile);
} }
if (PageAnon(page)) if (PageAnon(page))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment