(resend due to email address mistake) There's still more to do with the swap code, but this reaps a lot of the folio benefit. More than 4kB of kernel text saved (with the UEK7 kernel config). I don't know how much that's going to translate into CPU savings, but some of those compound_head() calls are on every page free, so it should be noticable. It might even be noticable just from an I-cache consumption perspective. This is against next-20220617 plus my prior vmscan patch series. It's in the middle of an xfstests run right now, so it at least boots. Matthew Wilcox (Oracle) (22): mm: Add folios_put() mm/swap: Add folio_batch_move_lru() mm/swap: Make __pagevec_lru_add static mm/swap: Convert lru_add to a folio_batch mm/swap: Convert lru_deactivate_file to a folio_batch mm/swap: Convert lru_deactivate to a folio_batch mm/swap: Convert lru_lazyfree to a folio_batch mm/swap: Convert activate_page to a folio_batch mm/swap: Rename lru_pvecs to cpu_fbatches mm/swap: Pull the CPU conditional out of __lru_add_drain_all() mm/swap: Optimise lru_add_drain_cpu() mm/swap: Convert try_to_free_swap to use a folio mm/swap: Convert release_pages to use a folio internally mm/swap: Convert put_pages_list to use folios mm/swap: Convert __put_page() to __folio_put() mm/swap: Convert __put_single_page() to __folio_put_small() mm/swap: Convert __put_compound_page() to __folio_put_large() mm/swap: Convert __page_cache_release() to use a folio mm: Convert destroy_compound_page() to destroy_large_folio() mm: Convert page_swap_flags to folio_swap_flags mm/swap: Convert delete_from_swap_cache() to take a folio mm/swap: Convert __delete_from_swap_cache() to a folio include/linux/mm.h | 33 ++- include/linux/pagemap.h | 2 - include/linux/pagevec.h | 1 - mm/memory-failure.c | 5 +- mm/shmem.c | 4 +- mm/swap.c | 599 +++++++++++++++++++--------------------- mm/swap.h | 14 +- mm/swap_state.c | 39 +-- mm/swapfile.c | 23 +- mm/vmscan.c | 8 +- net/core/page_pool.c | 2 +- 11 files changed, 359 insertions(+), 371 deletions(-) -- 2.35.1