diff --git a/mm/huge_memory.c b/mm/huge_memory.c index bec6243b69658b4aa03137d65dc425ba44ebbf36..010d32944d14d64f7b6174bc1bed9a38c159dc9d 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -1450,6 +1450,8 @@ int split_huge_page(struct page *page) int hugepage_madvise(struct vm_area_struct *vma, unsigned long *vm_flags, int advice) { + struct mm_struct *mm = vma->vm_mm; + switch (advice) { case MADV_HUGEPAGE: /* @@ -1457,6 +1459,8 @@ int hugepage_madvise(struct vm_area_struct *vma, */ if (*vm_flags & (VM_HUGEPAGE | VM_NO_THP)) return -EINVAL; + if (mm->def_flags & VM_NOHUGEPAGE) + return -EINVAL; *vm_flags &= ~VM_NOHUGEPAGE; *vm_flags |= VM_HUGEPAGE; /*