HWPOISON: Use new shake_page in memory_failure
shake_page handles more types of page caches than the much simpler lru_add_drain_all: - slab (quite inefficiently for now) - any other caches with a shrinker callback - per cpu page allocator pages - per CPU LRU Use this call to try to turn pages into free or LRU pages. Then handle the case of the page becoming free after drain everything. Signed-off-by: Andi Kleen <ak@linux.intel.com>
This commit is contained in:
parent
fe194d3e10
commit
0474a60ec7
@ -936,8 +936,15 @@ int __memory_failure(unsigned long pfn, int trapno, int flags)
|
|||||||
* walked by the page reclaim code, however that's not a big loss.
|
* walked by the page reclaim code, however that's not a big loss.
|
||||||
*/
|
*/
|
||||||
if (!PageLRU(p))
|
if (!PageLRU(p))
|
||||||
lru_add_drain_all();
|
shake_page(p);
|
||||||
if (!PageLRU(p)) {
|
if (!PageLRU(p)) {
|
||||||
|
/*
|
||||||
|
* shake_page could have turned it free.
|
||||||
|
*/
|
||||||
|
if (is_free_buddy_page(p)) {
|
||||||
|
action_result(pfn, "free buddy, 2nd try", DELAYED);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
action_result(pfn, "non LRU", IGNORED);
|
action_result(pfn, "non LRU", IGNORED);
|
||||||
put_page(p);
|
put_page(p);
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
Loading…
Reference in New Issue
Block a user