On 01/03/23 21:00, Matthew Wilcox wrote: > On Tue, Jan 03, 2023 at 01:13:35PM -0600, Sidhartha Kumar wrote: > > +static struct folio *dequeue_hugetlb_folio_node_exact(struct hstate *h, > > + int nid) > > { > > struct page *page; > > + struct folio *folio; > > bool pin = !!(current->flags & PF_MEMALLOC_PIN); > > > > lockdep_assert_held(&hugetlb_lock); > > list_for_each_entry(page, &h->hugepage_freelists[nid], lru) { > > - if (pin && !is_longterm_pinnable_page(page)) > > + folio = page_folio(page); > > I'd argue that you can pull folios directly off the hugepage_freelists. > Since they're attached through the 'lru', you know they're not tail > pages, because lru.prev aliases with compound_head. Yes, then we can get rid of the local variable *page. A quick grep shows only the routine __mem_cgroup_uncharge_list() does this today. -- Mike Kravetz