On Wed, Mar 10, 2021 at 04:54:49PM +0000, David Howells wrote: > Add a function, unlock_page_private_2(), to unlock PG_private_2 analogous > to that of PG_lock. Add a kerneldoc banner to that indicating the example > usage case. This isn't a problem with this patch per se, but I'm concerned about private2 and expected page refcounts. static inline int is_page_cache_freeable(struct page *page) { /* * A freeable page cache page is referenced only by the caller * that isolated the page, the page cache and optional buffer * heads at page->private. */ int page_cache_pins = thp_nr_pages(page); return page_count(page) - page_has_private(page) == 1 + page_cache_pins; } static inline int page_has_private(struct page *page) { return !!(page->flags & PAGE_FLAGS_PRIVATE); } #define PAGE_FLAGS_PRIVATE \ (1UL << PG_private | 1UL << PG_private_2) So ... a page with both flags cleared should have a refcount of N. A page with one or both flags set should have a refcount of N+1. How is a poor filesystem supposed to make that true? Also btrfs has this problem since it uses private_2 for its own purposes.