On Tue, 15 Feb 2022, Matthew Wilcox wrote: > On Mon, Feb 14, 2022 at 06:37:29PM -0800, Hugh Dickins wrote: > > +/* > > + * Flags held in the low bits of a struct page pointer on the mlock_pvec. > > + */ > > +#define LRU_PAGE 0x1 > > +#define NEW_PAGE 0x2 > > +#define mlock_lru(page) ((struct page *)((unsigned long)page + LRU_PAGE)) > > +#define mlock_new(page) ((struct page *)((unsigned long)page + NEW_PAGE)) > > You've tripped over one of the weirdnesses in the C preprocessor here. > If the variable passed is not _named_ page, it gets cast to a pointer > to a struct of the same name as the variable. There's no way to tell > cpp that that 'page' after 'struct' is literal and not to be replaced > by the 'page' argument. > > I'm going to change this to: > > static inline struct page *mlock_lru(struct page *page) > { > return (struct page *)((unsigned long)page + LRU_PAGE); > } > > (mutatis mutandi for mlock_new) Okay, thanks. (You're not naming your folio "page" :-?) Hugh