On Thu, Apr 21, 2022 at 11:01 PM Nicholas Piggin <npiggin@xxxxxxxxx> wrote: > > Huge vmalloc higher-order backing pages were allocated with __GFP_COMP > in order to allow the sub-pages to be refcounted by callers such as > "remap_vmalloc_page [sic]" (remap_vmalloc_range). > > However a similar problem exists for other struct page fields callers > use, for example fb_deferred_io_fault() takes a vmalloc'ed page and > not only refcounts it but uses ->lru, ->mapping, ->index. This is not > compatible with compound sub-pages. > > The correct approach is to use split high-order pages for the huge > vmalloc backing. These allow callers to treat them in exactly the same > way as individually-allocated order-0 pages. This patch looks ObviouslyCorrect(tm), and you even reproduced the fbdev problem. Applied. Linus