mm: migrate: Drop the misplaced pages reference count if the target node is full
authorMel Gorman <mgorman@suse.de>
Tue, 27 Nov 2012 14:03:05 +0000 (14:03 +0000)
committerMel Gorman <mgorman@suse.de>
Tue, 11 Dec 2012 14:42:42 +0000 (14:42 +0000)
If we have to avoid migrating to a node that is nearly full, put page
and return zero.

Signed-off-by: Hillf Danton <dhillf@gmail.com>
Signed-off-by: Mel Gorman <mgorman@suse.de>
mm/migrate.c

index d168aec98427e919a39d280f420a9d7f06b3ef5b..c7d550011a640b95d8e46f54a9a9185e6d502b75 100644 (file)
@@ -1489,18 +1489,21 @@ int migrate_misplaced_page(struct page *page, int node)
                }
                isolated = 1;
 
-               /*
-                * Page is isolated which takes a reference count so now the
-                * callers reference can be safely dropped without the page
-                * disappearing underneath us during migration
-                */
-               put_page(page);
-
                page_lru = page_is_file_cache(page);
                inc_zone_page_state(page, NR_ISOLATED_ANON + page_lru);
                list_add(&page->lru, &migratepages);
        }
 
+       /*
+        * Page is either isolated or there is not enough space on the target
+        * node. If isolated, then it has taken a reference count and the
+        * callers reference can be safely dropped without the page
+        * disappearing underneath us during migration. Otherwise the page is
+        * not to be migrated but the callers reference should still be
+        * dropped so it does not leak.
+        */
+       put_page(page);
+
        if (isolated) {
                int nr_remaining;