diff options
Diffstat (limited to 'mm/memory-failure.c')
| -rw-r--r-- | mm/memory-failure.c | 16 | 
1 files changed, 8 insertions, 8 deletions
| diff --git a/mm/memory-failure.c b/mm/memory-failure.c index d9359b770cd9..501820c815b3 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1187,10 +1187,10 @@ int memory_failure(unsigned long pfn, int trapno, int flags)  	 * The check (unnecessarily) ignores LRU pages being isolated and  	 * walked by the page reclaim code, however that's not a big loss.  	 */ -	if (!PageHuge(p) && !PageTransTail(p)) { -		if (!PageLRU(p)) -			shake_page(p, 0); -		if (!PageLRU(p)) { +	if (!PageHuge(p)) { +		if (!PageLRU(hpage)) +			shake_page(hpage, 0); +		if (!PageLRU(hpage)) {  			/*  			 * shake_page could have turned it free.  			 */ @@ -1777,12 +1777,12 @@ int soft_offline_page(struct page *page, int flags)  	} else if (ret == 0) { /* for free pages */  		if (PageHuge(page)) {  			set_page_hwpoison_huge_page(hpage); -			dequeue_hwpoisoned_huge_page(hpage); -			atomic_long_add(1 << compound_order(hpage), +			if (!dequeue_hwpoisoned_huge_page(hpage)) +				atomic_long_add(1 << compound_order(hpage),  					&num_poisoned_pages);  		} else { -			SetPageHWPoison(page); -			atomic_long_inc(&num_poisoned_pages); +			if (!TestSetPageHWPoison(page)) +				atomic_long_inc(&num_poisoned_pages);  		}  	}  	unset_migratetype_isolate(page, MIGRATE_MOVABLE); |