Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0474a60e authored by Andi Kleen's avatar Andi Kleen Committed by Andi Kleen
Browse files

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: default avatarAndi Kleen <ak@linux.intel.com>
parent fe194d3e
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -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;