Matthew Wilcox <willy@xxxxxxxxxxxxx> writes: > On Mon, Mar 06, 2023 at 08:51:45PM +0530, Ritesh Harjani wrote: >> Matthew Wilcox <willy@xxxxxxxxxxxxx> writes: >> >> > On Mon, Mar 06, 2023 at 12:21:48PM +0530, Ritesh Harjani wrote: >> >> "Matthew Wilcox (Oracle)" <willy@xxxxxxxxxxxxx> writes: >> >> >> >> > All the callers now have a folio, so pass that in and operate on folios. >> >> > Removes four calls to compound_head(). >> >> >> >> Why do you say four? Isn't it 3 calls of PageUptodate(page) which >> >> removes calls to compound_head()? Which one did I miss? >> >> >> >> > - BUG_ON(!PageLocked(page)); >> >> > + BUG_ON(!folio_test_locked(folio)); >> > >> > That one ;-) >> >> __PAGEFLAG(Locked, locked, PF_NO_TAIL) >> >> #define __PAGEFLAG(uname, lname, policy) \ >> TESTPAGEFLAG(uname, lname, policy) \ >> __SETPAGEFLAG(uname, lname, policy) \ >> __CLEARPAGEFLAG(uname, lname, policy) >> >> #define TESTPAGEFLAG(uname, lname, policy) \ >> static __always_inline bool folio_test_##lname(struct folio *folio) \ >> { return test_bit(PG_##lname, folio_flags(folio, FOLIO_##policy)); } \ >> static __always_inline int Page##uname(struct page *page) \ >> { return test_bit(PG_##lname, &policy(page, 0)->flags); } >> >> How? PageLocked(page) doesn't do any compount_head() calls no? > > You missed one piece of the definition ... > > #define PF_NO_TAIL(page, enforce) ({ \ > VM_BUG_ON_PGFLAGS(enforce && PageTail(page), page); \ > PF_POISONED_CHECK(compound_head(page)); }) aah yes, right. Thanks for pointing it. -ritesh