|
@@ -1131,6 +1131,13 @@ static int replace_page(struct vm_area_struct *vma, struct page *page,
|
|
|
} else {
|
|
|
newpte = pte_mkspecial(pfn_pte(page_to_pfn(kpage),
|
|
|
vma->vm_page_prot));
|
|
|
+ /*
|
|
|
+ * We're replacing an anonymous page with a zero page, which is
|
|
|
+ * not anonymous. We need to do proper accounting otherwise we
|
|
|
+ * will get wrong values in /proc, and a BUG message in dmesg
|
|
|
+ * when tearing down the mm.
|
|
|
+ */
|
|
|
+ dec_mm_counter(mm, MM_ANONPAGES);
|
|
|
}
|
|
|
|
|
|
flush_cache_page(vma, addr, pte_pfn(*ptep));
|