Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3bba3c3 authored by Naoya Horiguchi's avatar Naoya Horiguchi Committed by Linus Torvalds
Browse files

fs/proc/page.c: add PageAnon check to surely detect thp



stable_page_flags() checks !PageHuge && PageTransCompound && PageLRU to
know that a specified page is thp or not.  But sometimes it's not enough
and we fail to detect thp when the thp is on pagevec.  This happens only
for a few seconds after LRU list operations, but it makes it difficult
to control our applications depending on this flag.

So this patch adds another check PageAnon to detect thps on pagevec.  It
might not give the future extensibility for thp pagecache, but it's OK
at least for now.

Signed-off-by: default avatarNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: David Rientjes <rientjes@google.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 8ff69e2c
Loading
Loading
Loading
Loading
+5 −3
Original line number Original line Diff line number Diff line
@@ -118,10 +118,12 @@ u64 stable_page_flags(struct page *page)
	/*
	/*
	 * PageTransCompound can be true for non-huge compound pages (slab
	 * PageTransCompound can be true for non-huge compound pages (slab
	 * pages or pages allocated by drivers with __GFP_COMP) because it
	 * pages or pages allocated by drivers with __GFP_COMP) because it
	 * just checks PG_head/PG_tail, so we need to check PageLRU to make
	 * just checks PG_head/PG_tail, so we need to check PageLRU/PageAnon
	 * sure a given page is a thp, not a non-huge compound page.
	 * to make sure a given page is a thp, not a non-huge compound page.
	 */
	 */
	else if (PageTransCompound(page) && PageLRU(compound_trans_head(page)))
	else if (PageTransCompound(page) &&
		 (PageLRU(compound_trans_head(page)) ||
		  PageAnon(compound_trans_head(page))))
		u |= 1 << KPF_THP;
		u |= 1 << KPF_THP;


	/*
	/*