On Thu, Apr 04, 2024 at 01:05:57AM +0100, Matthew Wilcox wrote: > On Tue, Apr 02, 2024 at 09:32:47PM -0400, peterx@xxxxxxxxxx wrote: > > +++ b/include/linux/page-flags.h > > @@ -1095,7 +1095,13 @@ PAGEFLAG(Isolated, isolated, PF_ANY); > > static __always_inline int PageAnonExclusive(const struct page *page) > > { > > VM_BUG_ON_PGFLAGS(!PageAnon(page), page); > > - VM_BUG_ON_PGFLAGS(PageHuge(page) && !PageHead(page), page); > > + /* > > + * Allow the anon-exclusive check to work on hugetlb tail pages. > > + * Here hugetlb pages will always guarantee the anon-exclusiveness > > + * of the head page represents the tail pages. > > + */ > > + if (PageHuge(page) && !PageHead(page)) > > + page = compound_head(page); > > I think this should be written as: > > /* > * HugeTLB stores this information on the head page; THP keeps > * it per page > */ This comment does look clean and cleaner indeed. And yes, mention THP can be helpful too. > if (PageHuge(page)) > page = compound_head(page); I would think PageHead() check would help us to avoid compound_head() on heads, which should still be the majority cases iiuc (assuming page->flags is already around in the cache anyway). I've no strong opinion though, as I can hardly tell a difference in reality. > > > return test_bit(PG_anon_exclusive, &PF_ANY(page, 1)->flags); > > } > Thanks, -- Peter Xu