Why not attach_page_private and clear_page_private as that conveys the use case a little better? > +static inline void *set_fs_page_private(struct page *page, void *data) > +{ > + get_page(page); > + set_page_private(page, (unsigned long)data); > + SetPagePrivate(page); > + > + return data; > +} > + > +static inline void *clear_fs_page_private(struct page *page) > +{ > + void *data = (void *)page_private(page); > + > + if (!PagePrivate(page)) > + return NULL; > + ClearPagePrivate(page); > + set_page_private(page, 0); > + put_page(page); > + > + return data; > +} Can you add kerneldoc comments describing them, including why we take the refernces? Also what is the point of the return value of set_fs_page_private?