]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - mm/migrate.c
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git...
[karo-tx-linux.git] / mm / migrate.c
index 2740360cd216ca45054387f481c7c31775d4ebff..01439953abf548690ac17f1b994511b587e9326a 100644 (file)
@@ -876,7 +876,7 @@ static int __unmap_and_move(struct page *page, struct page *newpage,
                }
        }
 
-       if (unlikely(balloon_page_movable(page))) {
+       if (unlikely(isolated_balloon_page(page))) {
                /*
                 * A ballooned page does not need any special attention from
                 * physical to virtual reverse mapping procedures.
@@ -955,17 +955,6 @@ static int unmap_and_move(new_page_t get_new_page, free_page_t put_new_page,
 
        rc = __unmap_and_move(page, newpage, force, mode);
 
-       if (unlikely(rc == MIGRATEPAGE_BALLOON_SUCCESS)) {
-               /*
-                * A ballooned page has been migrated already.
-                * Now, it's the time to wrap-up counters,
-                * handle the page back to Buddy and return.
-                */
-               dec_zone_page_state(page, NR_ISOLATED_ANON +
-                                   page_is_file_cache(page));
-               balloon_page_free(page);
-               return MIGRATEPAGE_SUCCESS;
-       }
 out:
        if (rc != -EAGAIN) {
                /*
@@ -988,6 +977,9 @@ out:
        if (rc != MIGRATEPAGE_SUCCESS && put_new_page) {
                ClearPageSwapBacked(newpage);
                put_new_page(newpage, private);
+       } else if (unlikely(__is_movable_balloon_page(newpage))) {
+               /* drop our reference, page already in the balloon */
+               put_page(newpage);
        } else
                putback_lru_page(newpage);