Currently, the KSM-related counters in `mm_struct` such as `ksm_merging_pages`, `ksm_rmap_items`, and `ksm_zero_pages` are inherited by the child process during fork. This results in incorrect accounting, since the child has not performed any KSM page merging. To fix this, reset these counters to 0 in the newly created `mm_struct` during fork. This ensures that KSM statistics remain accurate and only reflect the activity of each process. Signed-off-by: Donet Tom --- include/linux/ksm.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/linux/ksm.h b/include/linux/ksm.h index 22e67ca7cba3..61b8892c632b 100644 --- a/include/linux/ksm.h +++ b/include/linux/ksm.h @@ -56,8 +56,12 @@ static inline long mm_ksm_zero_pages(struct mm_struct *mm) static inline void ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm) { /* Adding mm to ksm is best effort on fork. */ - if (mm_flags_test(MMF_VM_MERGEABLE, oldmm)) + if (mm_flags_test(MMF_VM_MERGEABLE, oldmm)) { + mm->ksm_merging_pages = 0; + mm->ksm_rmap_items = 0; + atomic_long_set(&mm->ksm_zero_pages, 0); __ksm_enter(mm); + } } static inline int ksm_execve(struct mm_struct *mm) -- 2.51.0