From: Zi Yan <ziy@xxxxxxxxxx> Hi all, With Matthew's huge pagecache page patches merged, we are able to handle any size pagecache pages, but currently split_huge_page can only split a huge page to order-0 pages. This can easily erase the benefit of having huge pagecache pages, when operations like truncate might want to keep pages larger than order-0. In response, here is the patches to add support for splitting a huge page to any lower order pages. The patchset is on top of mmotm-2022-03-16-17-42. * Patch 1 and 2 add new_order parameter split_page_memcg() and split_page_owner() and prepare for upcoming changes. * Patch 3 adds split_huge_page_to_list_to_order() to split a huge page to any lower order. The original split_huge_page_to_list() calls split_huge_page_to_list_to_order() with new_order = 0. * Patch 4 uses split_huge_page_to_list_to_order() in huge pagecache page truncation instead of split the huge page all the way down to order-0. * Patch 5 adds a test API to debugfs and test cases in split_huge_page_test selftests. Comments and/or suggestions are welcome. Zi Yan (5): mm: memcg: make memcg huge page split support any order split. mm: page_owner: add support for splitting to any order in split page_owner. mm: thp: split huge page to any lower order pages. mm: truncate: split huge page cache page to a non-zero order if possible. mm: huge_memory: enable debugfs to split huge pages to any order. include/linux/huge_mm.h | 8 + include/linux/memcontrol.h | 2 +- include/linux/page_owner.h | 12 +- mm/huge_memory.c | 139 +++++++---- mm/memcontrol.c | 10 +- mm/page_alloc.c | 4 +- mm/page_owner.c | 13 +- mm/truncate.c | 33 ++- .../selftests/vm/split_huge_page_test.c | 219 +++++++++++++++--- 9 files changed, 347 insertions(+), 93 deletions(-) -- 2.35.1