On Sat, Aug 16, 2025 at 09:31:09AM +0530, Aboorva Devarajan wrote:
From: Donet Tom donettom@linux.ibm.com
This patch fixed 2 issues.
- After fork() in test_prctl_fork, the child process uses the file
descriptors from the parent process to read ksm_stat and ksm_merging_pages. This results in incorrect values being read (parent process ksm_stat and ksm_merging_pages will be read in child), causing the test to fail.
This patch calls init_global_file_handles() in the child process to ensure that the current process's file descriptors are used to read ksm_stat and ksm_merging_pages.
- All tests currently call ksm_merge to trigger page merging.
To ensure the system remains in a consistent state for subsequent tests, it is better to call ksm_unmerge during the test cleanup phase
In the test_prctl_fork test, after a fork(), reading ksm_merging_pages in the child process returns a non-zero value because a previous test performed a merge, and the child's memory state is inherited from the parent.
Although the child process calls ksm_unmerge, the ksm_merging_pages counter in the parent is reset to zero, while the child's counter remains unchanged. This discrepancy causes the test to fail.
To avoid this issue, each test should call ksm_unmerge during cleanup to ensure the counter is reset and the system is in a clean state for subsequent tests.
execv argument is an array of pointers to null-terminated strings. In this patch we also added NULL in the execv argument.
Fixes: 6c47de3be3a0 ("selftest/mm: ksm_functional_tests: extend test case for ksm fork/exec") Co-developed-by: Aboorva Devarajan aboorvad@linux.ibm.com Signed-off-by: Aboorva Devarajan aboorvad@linux.ibm.com Signed-off-by: Donet Tom donettom@linux.ibm.com
Reviewed-by: Wei Yang richard.weiyang@gmail.com