Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
[cascardo/linux.git] / mm / memory-failure.c
index 8639f6b..e5ee0ca 100644 (file)
@@ -233,7 +233,7 @@ void shake_page(struct page *p, int access)
                lru_add_drain_all();
                if (PageLRU(p))
                        return;
-               drain_all_pages();
+               drain_all_pages(page_zone(p));
                if (PageLRU(p) || is_free_buddy_page(p))
                        return;
        }
@@ -860,7 +860,6 @@ static int page_action(struct page_state *ps, struct page *p,
        int count;
 
        result = ps->action(p, pfn);
-       action_result(pfn, ps->msg, result);
 
        count = page_count(p) - 1;
        if (ps->action == me_swapcache_dirty && result == DELAYED)
@@ -871,6 +870,7 @@ static int page_action(struct page_state *ps, struct page *p,
                       pfn, ps->msg, count);
                result = FAILED;
        }
+       action_result(pfn, ps->msg, result);
 
        /* Could do more checks here if page looks ok */
        /*
@@ -1661,7 +1661,7 @@ static int __soft_offline_page(struct page *page, int flags)
                        if (!is_free_buddy_page(page))
                                lru_add_drain_all();
                        if (!is_free_buddy_page(page))
-                               drain_all_pages();
+                               drain_all_pages(page_zone(page));
                        SetPageHWPoison(page);
                        if (!is_free_buddy_page(page))
                                pr_info("soft offline: %#lx: page leaked\n",