diff options
Diffstat (limited to 'mm/memory-failure.c')
| -rw-r--r-- | mm/memory-failure.c | 17 | 
1 files changed, 8 insertions, 9 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 7c72f2a95785..fc8b51744579 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -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);  	}  	/*  |