xen/balloon: mark inflated pages PG_offline
[linux-2.6-microblaze.git] / mm / memory-failure.c
index 7c72f2a..fc8b517 100644 (file)
@@ -372,7 +372,8 @@ static void kill_procs(struct list_head *to_kill, int forcekill, bool fail,
                        if (fail || tk->addr_valid == 0) {
                                pr_err("Memory failure: %#lx: forcibly killing %s:%d because of failure to unmap corrupted page\n",
                                       pfn, tk->tsk->comm, tk->tsk->pid);
-                               force_sig(SIGKILL, tk->tsk);
+                               do_send_sig_info(SIGKILL, SEND_SIG_PRIV,
+                                                tk->tsk, PIDTYPE_PID);
                        }
 
                        /*
@@ -1824,19 +1825,17 @@ static int soft_offline_in_use_page(struct page *page, int flags)
        struct page *hpage = compound_head(page);
 
        if (!PageHuge(page) && PageTransHuge(hpage)) {
-               lock_page(hpage);
-               if (!PageAnon(hpage) || unlikely(split_huge_page(hpage))) {
-                       unlock_page(hpage);
-                       if (!PageAnon(hpage))
+               lock_page(page);
+               if (!PageAnon(page) || unlikely(split_huge_page(page))) {
+                       unlock_page(page);
+                       if (!PageAnon(page))
                                pr_info("soft offline: %#lx: non anonymous thp\n", page_to_pfn(page));
                        else
                                pr_info("soft offline: %#lx: thp split failed\n", page_to_pfn(page));
-                       put_hwpoison_page(hpage);
+                       put_hwpoison_page(page);
                        return -EBUSY;
                }
-               unlock_page(hpage);
-               get_hwpoison_page(page);
-               put_hwpoison_page(hpage);
+               unlock_page(page);
        }
 
        /*