selftests/mm: test splitting file-backed THP to any lower order

Now split_huge_page*() supports shmem THP split to any lower order.  Test
it.

The test now reads file content out after split to check if the split
corrupts the file data.

Link: https://lkml.kernel.org/r/20250122161928.1240637-3-ziy@nvidia.com
Signed-off-by: Zi Yan <ziy@nvidia.com>
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Tested-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: Kirill A. Shuemov <kirill.shutemov@linux.intel.com>
Cc: Miaohe Lin <linmiaohe@huawei.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Yang Shi <yang@os.amperecomputing.com>
Cc: Yu Zhao <yuzhao@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Zi Yan 2025-01-22 11:19:28 -05:00 committed by Andrew Morton
parent 9b2f764933
commit ad4c9bb541

View File

@ -261,7 +261,7 @@ void split_pte_mapped_thp(void)
close(kpageflags_fd);
}
void split_file_backed_thp(void)
void split_file_backed_thp(int order)
{
int status;
int fd;
@ -313,7 +313,7 @@ void split_file_backed_thp(void)
}
/* split the file-backed THP */
write_debugfs(PATH_FMT, testfile, pgoff_start, pgoff_end, 0);
write_debugfs(PATH_FMT, testfile, pgoff_start, pgoff_end, order);
/* check file content after split */
status = lseek(fd, 0, SEEK_SET);
@ -351,7 +351,7 @@ void split_file_backed_thp(void)
ksft_exit_fail_msg("cannot remove tmp dir: %s\n", strerror(errno));
ksft_print_msg("Please check dmesg for more information\n");
ksft_test_result_pass("File-backed THP split test done\n");
ksft_test_result_pass("File-backed THP split to order %d test done\n", order);
return;
close_file:
@ -517,7 +517,7 @@ int main(int argc, char **argv)
if (argc > 1)
optional_xfs_path = argv[1];
ksft_set_plan(1+8+2+9);
ksft_set_plan(1+8+1+9+9);
pagesize = getpagesize();
pageshift = ffs(pagesize) - 1;
@ -534,7 +534,8 @@ int main(int argc, char **argv)
split_pmd_thp_to_order(i);
split_pte_mapped_thp();
split_file_backed_thp();
for (i = 0; i < 9; i++)
split_file_backed_thp(i);
created_tmp = prepare_thp_fs(optional_xfs_path, fs_loc_template,
&fs_loc);