On Fri, Dec 11, 2020 at 12:19:50PM +0800, Muchun Song wrote:
> +++ b/mm/filemap.c
> @@ -207,7 +207,7 @@ static void unaccount_page_cache_page(struct
> address_space *mapping,
> if (PageTransHuge(page))
> __dec_lruvec_page_state(page, NR_SHMEM_THPS);
> } else if (PageTransHuge(page)) {
> - __dec_lruvec_page_state(page, NR_FILE_THPS);
> + __mod_lruvec_page_state(page, NR_FILE_THPS, -HPAGE_PMD_NR);
+ __mod_lruvec_page_state(page, NR_FILE_THPS, -nr);
> +++ b/mm/huge_memory.c
> @@ -2748,7 +2748,8 @@ int split_huge_page_to_list(struct page *page, struct
> list_head *list)
> if (PageSwapBacked(head))
> __dec_lruvec_page_state(head, NR_SHMEM_THPS);
> else
> - __dec_lruvec_page_state(head, NR_FILE_THPS);
> + __mod_lruvec_page_state(head, NR_FILE_THPS,
> + -HPAGE_PMD_NR);
+ __mod_lruvec_page_state(head, NR_FILE_THPS,
+ -thp_nr_pages(head));