]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blobdiff - mm/migrate.c
soundwire: bus: check first if Slaves become UNATTACHED
[mirror_ubuntu-hirsute-kernel.git] / mm / migrate.c
index 4fe45d1428c8676133cf17d4a84e9cbbd6d27bbb..eae1565285e3a0e1ecf2bc12a731d8081d17d31b 100644 (file)
@@ -1168,15 +1168,11 @@ static ICE_noinline int unmap_and_move(new_page_t get_new_page,
                                   enum migrate_reason reason)
 {
        int rc = MIGRATEPAGE_SUCCESS;
-       struct page *newpage;
+       struct page *newpage = NULL;
 
        if (!thp_migration_supported() && PageTransHuge(page))
                return -ENOMEM;
 
-       newpage = get_new_page(page, private);
-       if (!newpage)
-               return -ENOMEM;
-
        if (page_count(page) == 1) {
                /* page was freed from under us. So we are done. */
                ClearPageActive(page);
@@ -1187,13 +1183,13 @@ static ICE_noinline int unmap_and_move(new_page_t get_new_page,
                                __ClearPageIsolated(page);
                        unlock_page(page);
                }
-               if (put_new_page)
-                       put_new_page(newpage, private);
-               else
-                       put_page(newpage);
                goto out;
        }
 
+       newpage = get_new_page(page, private);
+       if (!newpage)
+               return -ENOMEM;
+
        rc = __unmap_and_move(page, newpage, force, mode);
        if (rc == MIGRATEPAGE_SUCCESS)
                set_page_owner_migrate_reason(newpage, reason);
@@ -1863,7 +1859,7 @@ static bool migrate_balanced_pgdat(struct pglist_data *pgdat,
                if (!zone_watermark_ok(zone, 0,
                                       high_wmark_pages(zone) +
                                       nr_migrate_pages,
-                                      0, 0))
+                                      ZONE_MOVABLE, 0))
                        continue;
                return true;
        }