]> git.ipfire.org Git - thirdparty/kernel/stable.git/blobdiff - mm/migrate.c
mm: migrate: check movability of hugepage in unmap_and_move_huge_page()
[thirdparty/kernel/stable.git] / mm / migrate.c
index d3137375fa80e401c4ead5db5c60152cfe3f8f7a..61f14a1923fd6044f7435498fd7cc9d0a0eebc9f 100644 (file)
@@ -949,6 +949,16 @@ static int unmap_and_move_huge_page(new_page_t get_new_page,
        struct page *new_hpage = get_new_page(hpage, private, &result);
        struct anon_vma *anon_vma = NULL;
 
+       /*
+        * Movability of hugepages depends on architectures and hugepage size.
+        * This check is necessary because some callers of hugepage migration
+        * like soft offline and memory hotremove don't walk through page
+        * tables or check whether the hugepage is pmd-based or not before
+        * kicking migration.
+        */
+       if (!hugepage_migration_support(page_hstate(hpage)))
+               return -ENOSYS;
+
        if (!new_hpage)
                return -ENOMEM;