After commit 2fd4e7693674 ("mm: fix incorrect vm_flags usage when checking allowable orders for tmpfs"), hugepage_madvise() no longer calls any khugepaged related functions and only updates the VMA flags. So remove this helper and update the VMA flags directly in madvise_update_vma(), which simplifies the code. Signed-off-by: Baolin Wang --- include/linux/huge_mm.h | 8 -------- mm/khugepaged.c | 22 ---------------------- mm/madvise.c | 8 +++++--- 3 files changed, 5 insertions(+), 33 deletions(-) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index 8ca0fa3be2ac..334c387ad997 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -508,8 +508,6 @@ change_huge_pud(struct mmu_gather *tlb, struct vm_area_struct *vma, __split_huge_pud(__vma, __pud, __address); \ } while (0) -int hugepage_madvise(struct vm_area_struct *vma, vm_flags_t *vm_flags, - int advice); void vma_adjust_trans_huge(struct vm_area_struct *vma, unsigned long start, unsigned long end, struct vm_area_struct *next); spinlock_t *__pmd_trans_huge_lock(pmd_t *pmd, struct vm_area_struct *vma); @@ -707,12 +705,6 @@ static inline bool unmap_huge_pmd_locked(struct vm_area_struct *vma, #define split_huge_pud(__vma, __pmd, __address) \ do { } while (0) -static inline int hugepage_madvise(struct vm_area_struct *vma, - vm_flags_t *vm_flags, int advice) -{ - return -EINVAL; -} - static inline void vma_adjust_trans_huge(struct vm_area_struct *vma, unsigned long start, unsigned long end, diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 21d75f5b4b4d..f81ecaaa4890 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -380,28 +380,6 @@ static unsigned int collapse_max_ptes_swap(struct collapse_control *cc, return cc->policy.max_ptes_swap; } -int hugepage_madvise(struct vm_area_struct *vma, - vm_flags_t *vm_flags, int advice) -{ - switch (advice) { - case MADV_HUGEPAGE: - *vm_flags &= ~VM_NOHUGEPAGE; - *vm_flags |= VM_HUGEPAGE; - break; - case MADV_NOHUGEPAGE: - *vm_flags &= ~VM_HUGEPAGE; - *vm_flags |= VM_NOHUGEPAGE; - /* - * Setting VM_NOHUGEPAGE will prevent khugepaged from scanning - * this vma even if we leave the mm registered in khugepaged if - * it got registered before VM_NOHUGEPAGE was set. - */ - break; - } - - return 0; -} - int __init khugepaged_init(void) { mm_slot_cache = KMEM_CACHE(mm_slot, 0); diff --git a/mm/madvise.c b/mm/madvise.c index eb491fa88325..4150f6a8cf64 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1598,10 +1598,12 @@ static int madvise_vma_behavior(struct madvise_behavior *madv_behavior) goto out; break; case MADV_HUGEPAGE: + new_flags &= ~VM_NOHUGEPAGE; + new_flags |= VM_HUGEPAGE; + break; case MADV_NOHUGEPAGE: - error = hugepage_madvise(vma, &new_flags, behavior); - if (error) - goto out; + new_flags &= ~VM_HUGEPAGE; + new_flags |= VM_NOHUGEPAGE; break; case __MADV_SET_ANON_VMA_NAME: /* Only anonymous mappings can be named */ -- 2.47.3