Commit a38c015f3156895b07e71d4e4414289f8a3b2745

Authored by Claudio Imbrenda
Committed by Linus Torvalds
1 parent 8a97ea546b

mm/ksm.c: fix inconsistent accounting of zero pages

When using KSM with use_zero_pages, we replace anonymous pages
containing only zeroes with actual zero pages, which are not anonymous.
We need to do proper accounting of the mm counters, otherwise we will
get wrong values in /proc and a BUG message in dmesg when tearing down
the mm.

Link: http://lkml.kernel.org/r/1522931274-15552-1-git-send-email-imbrenda@linux.vnet.ibm.com
Fixes: e86c59b1b1 ("mm/ksm: improve deduplication of zero pages with colouring")
Signed-off-by: Claudio Imbrenda <imbrenda@linux.vnet.ibm.com>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 7 additions and 0 deletions Side-by-side Diff

... ... @@ -1131,6 +1131,13 @@
1131 1131 } else {
1132 1132 newpte = pte_mkspecial(pfn_pte(page_to_pfn(kpage),
1133 1133 vma->vm_page_prot));
  1134 + /*
  1135 + * We're replacing an anonymous page with a zero page, which is
  1136 + * not anonymous. We need to do proper accounting otherwise we
  1137 + * will get wrong values in /proc, and a BUG message in dmesg
  1138 + * when tearing down the mm.
  1139 + */
  1140 + dec_mm_counter(mm, MM_ANONPAGES);
1134 1141 }
1135 1142  
1136 1143 flush_cache_page(vma, addr, pte_pfn(*ptep));