From: Ye Liu __khugepaged_enter() sets MMF_VM_HUGEPAGE before allocating the corresponding mm_slot. If mm_slot_alloc() fails, the function returns with the flag set but without inserting the mm into the khugepaged tracking structures. This leaves the mm in an inconsistent state: it is marked as registered (MMF_VM_HUGEPAGE set), but will never be scanned by khugepaged. Future attempts to register the mm are skipped since khugepaged_enter_vma() checks the flag and returns early. Fix this by clearing MMF_VM_HUGEPAGE when mm_slot_alloc() fails, restoring the ability to retry registration later. Fixes: 16618670276a ("mm: khugepaged: avoid pointless allocation for struct mm_slot") Signed-off-by: Ye Liu --- Changes since v1: - Add Fixes tag as suggested by Dev Jain and Lance Yang mm/khugepaged.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 7d48d4fbd5f3..60ab7c1b61dd 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -559,8 +559,10 @@ void __khugepaged_enter(struct mm_struct *mm) return; slot = mm_slot_alloc(mm_slot_cache); - if (!slot) + if (!slot) { + mm_flags_clear(MMF_VM_HUGEPAGE, mm); return; + } spin_lock(&khugepaged_mm_lock); mm_slot_insert(mm_slots_hash, mm, slot); -- 2.43.0