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:
Родитель
fe194d3e10
Коммит
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.
|
||||
*/
|
||||
if (!PageLRU(p))
|
||||
lru_add_drain_all();
|
||||
shake_page(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);
|
||||
put_page(p);
|
||||
return -EBUSY;
|
||||
|
|
Загрузка…
Ссылка в новой задаче