aboutsummaryrefslogtreecommitdiffstats
path: root/mm/memory.c
diff options
context:
space:
mode:
authorPeter Feiner <pfeiner@google.com>2014-09-25 16:05:29 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-10-05 14:52:21 -0700
commit3e272e4fe150d565189c1558e51fdf6e801c97ce (patch)
tree727c961eb6b30e954e18c0c4a0935dfec98c3027 /mm/memory.c
parent168e7c5696a1bed56c3d52ebef97a280e404daaf (diff)
downloadlinux-yocto-3e272e4fe150d565189c1558e51fdf6e801c97ce.tar.gz
linux-yocto-3e272e4fe150d565189c1558e51fdf6e801c97ce.tar.bz2
linux-yocto-3e272e4fe150d565189c1558e51fdf6e801c97ce.zip
mm: softdirty: keep bit when zapping file pte
commit dbab31aa2ceec2d201966fa0b552f151310ba5f4 upstream. This fixes the same bug as b43790eedd31 ("mm: softdirty: don't forget to save file map softdiry bit on unmap") and 9aed8614af5a ("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: Peter Feiner <pfeiner@google.com> Acked-by: Cyrill 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: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'mm/memory.c')
-rw-r--r--mm/memory.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/mm/memory.c b/mm/memory.c
index 2121d8b8db56..492e36f27f43 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1120,7 +1120,7 @@ again:
addr) != page->index) {
pte_t ptfile = pgoff_to_pte(page->index);
if (pte_soft_dirty(ptent))
- pte_file_mksoft_dirty(ptfile);
+ ptfile = pte_file_mksoft_dirty(ptfile);
set_pte_at(mm, addr, pte, ptfile);
}
if (PageAnon(page))