On Mon, Jan 19, 2026 at 04:41:42PM +1100, Alistair Popple wrote: > > And if we want to have things set on free that's fine too, but there > > should be reasons for doing stuff, and this weird thing above makes > > zero sense. > > You can't think of these as tail pages or head pages. They are just random > struct pages, possibly order-0 or PageHead or PageTail, with fields in a > "random" state based on what they were last used for.
Agree on random state. > All this function should be trying to do is initialising this random state to > something sane as defined by the core-mm for it to consume. Yes, some might > later end up being tail (or head) pages if order > 0 and prep_compound_page() > is called. Not "later" during this function. The end result of this entire function is to setup folio starting at page and at order. Meaning we are deliberately *creating* head and tail pages out of random junk left over in the struct page. > But the point of this function and the loop is to initialise the > struct page as an order-0 page with "sane" fields to pass to core-mm or call > prep_compound_page() on. Which is what seems nonsensical to me. prep_compound_page() does another loop over all these pages and *re sets* many of the same fields. You are aruging we should clean things and then call perp_compund_page(), I'm arguing prep_compound_page() just just accept the junk and fix it. > This could for example just use memset(new_page, 0, sizeof(struct page)) and > then refill all the fields correctly (although Vlastimil pointed out some page > flags need preservation). But a big part of the problem is there is no single > definition (AFAIK) of what state a struct page should be in before handing it > to > the core-mm via either vm_insert_page()/pages()/etc. or migrate_vma_*() nor > what > state the kernel leaves it in once freed. I agree with this, but I argue that prep_compound_page() should codify whatever that requirement is so we can trend toward such an agreed definition. See Matthew's first missive on this about doing things properly in the core code instead of hacking in drivers. Jason
