]> git.karo-electronics.de Git - linux-beck.git/blobdiff - mm/rmap.c
mm, rmap: account shmem thp pages
[linux-beck.git] / mm / rmap.c
index 9d643b7a99ce70b59e4e60c7ad58a1ec7291c3b4..8a13d9f7b5666b153d64788576f46029bdc1d99f 100644 (file)
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -1212,10 +1212,8 @@ void do_page_add_anon_rmap(struct page *page,
                 * pte lock(a spinlock) is held, which implies preemption
                 * disabled.
                 */
-               if (compound) {
-                       __inc_zone_page_state(page,
-                                             NR_ANON_TRANSPARENT_HUGEPAGES);
-               }
+               if (compound)
+                       __inc_zone_page_state(page, NR_ANON_THPS);
                __mod_zone_page_state(page_zone(page), NR_ANON_PAGES, nr);
        }
        if (unlikely(PageKsm(page)))
@@ -1253,7 +1251,7 @@ void page_add_new_anon_rmap(struct page *page,
                VM_BUG_ON_PAGE(!PageTransHuge(page), page);
                /* increment count (starts at -1) */
                atomic_set(compound_mapcount_ptr(page), 0);
-               __inc_zone_page_state(page, NR_ANON_TRANSPARENT_HUGEPAGES);
+               __inc_zone_page_state(page, NR_ANON_THPS);
        } else {
                /* Anon THP always mapped first with PMD */
                VM_BUG_ON_PAGE(PageTransCompound(page), page);
@@ -1283,6 +1281,8 @@ void page_add_file_rmap(struct page *page, bool compound)
                }
                if (!atomic_inc_and_test(compound_mapcount_ptr(page)))
                        goto out;
+               VM_BUG_ON_PAGE(!PageSwapBacked(page), page);
+               __inc_zone_page_state(page, NR_SHMEM_PMDMAPPED);
        } else {
                if (PageTransCompound(page)) {
                        VM_BUG_ON_PAGE(!PageLocked(page), page);
@@ -1321,6 +1321,8 @@ static void page_remove_file_rmap(struct page *page, bool compound)
                }
                if (!atomic_add_negative(-1, compound_mapcount_ptr(page)))
                        goto out;
+               VM_BUG_ON_PAGE(!PageSwapBacked(page), page);
+               __dec_zone_page_state(page, NR_SHMEM_PMDMAPPED);
        } else {
                if (!atomic_add_negative(-1, &page->_mapcount))
                        goto out;
@@ -1354,7 +1356,7 @@ static void page_remove_anon_compound_rmap(struct page *page)
        if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE))
                return;
 
-       __dec_zone_page_state(page, NR_ANON_TRANSPARENT_HUGEPAGES);
+       __dec_zone_page_state(page, NR_ANON_THPS);
 
        if (TestClearPageDoubleMap(page)) {
                /*