diff options
Diffstat (limited to 'mm/memory-failure.c')
| -rw-r--r-- | mm/memory-failure.c | 8 | 
1 files changed, 5 insertions, 3 deletions
| diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 4f08a2d61487..90002ea43638 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -945,8 +945,10 @@ static int hwpoison_user_mappings(struct page *p, unsigned long pfn,  			 * to it. Similarly, page lock is shifted.  			 */  			if (hpage != p) { -				put_page(hpage); -				get_page(p); +				if (!(flags & MF_COUNT_INCREASED)) { +					put_page(hpage); +					get_page(p); +				}  				lock_page(p);  				unlock_page(hpage);  				*hpagep = p; @@ -1649,7 +1651,7 @@ int soft_offline_page(struct page *page, int flags)  {  	int ret;  	unsigned long pfn = page_to_pfn(page); -	struct page *hpage = compound_trans_head(page); +	struct page *hpage = compound_head(page);  	if (PageHWPoison(page)) {  		pr_info("soft offline: %#lx page already poisoned\n", pfn); |