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;
 		/*