That might be the best option.
Yes, doing it in the 'struct page' itself is obviously going to save us
some memory over having specially allocated page headers, but it's not
like we'd expect to have _that_ many of these, and having a separate
structure is actually good in that it also would make it simpler/clearer
when/if you want to add larger pages (or other non-page allocations) into
the mix.
For example, if somebody really wants bigger areas, they can allocate them
with vmalloc and/or multi-page allocations, and then add them as easily to
the list of pages as if it was a normal page. Doing the same with playing
tricks on 'struct page' would be pretty damn painful.
Linus
--