On Thu, Oct 17, 2019 at 9:42 AM Song Liu <songliubraving@xxxxxx> wrote: > > From: "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx> > > Make sure split_huge_page_to_list() handle the state of shmem THP and > file THP properly. > > Fixes: 60fbf0ab5da1 ("mm,thp: stats for file backed THP") > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> > Tested-by: Song Liu <songliubraving@xxxxxx> > Signed-off-by: Song Liu <songliubraving@xxxxxx> Acked-by: Yang Shi <yang.shi@xxxxxxxxxxxxxxxxx> > --- > mm/huge_memory.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > index c5cb6dcd6c69..13cc93785006 100644 > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -2789,8 +2789,13 @@ int split_huge_page_to_list(struct page *page, struct list_head *list) > ds_queue->split_queue_len--; > list_del(page_deferred_list(head)); > } > - if (mapping) > - __dec_node_page_state(page, NR_SHMEM_THPS); > + if (mapping) { > + if (PageSwapBacked(page)) > + __dec_node_page_state(page, NR_SHMEM_THPS); > + else > + __dec_node_page_state(page, NR_FILE_THPS); > + } > + > spin_unlock(&ds_queue->split_queue_lock); > __split_huge_page(page, list, end, flags); > if (PageSwapCache(head)) { > -- > 2.17.1 > >