[PATCH 3/3] mm/memory_hotplug: make HWPoisoned dirty swapcache pages unmovable

From: Miaohe Lin
Date: Sat Aug 21 2021 - 05:43:02 EST


HWPoisoned dirty swapcache pages are kept for killing owner processes.
We should not offline these pages or do_swap_page() would access the
offline pages and lead to bad ending.

Signed-off-by: Miaohe Lin <linmiaohe@xxxxxxxxxx>
---
mm/memory_hotplug.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 9fd0be32a281..0488eed3327c 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -1664,6 +1664,12 @@ static int scan_movable_pages(unsigned long start, unsigned long end,
*/
if (PageOffline(page) && page_count(page))
return -EBUSY;
+ /*
+ * HWPoisoned dirty swapcache pages are definitely unmovable
+ * because they are kept for killing owner processes.
+ */
+ if (PageHWPoison(page) && PageSwapCache(page))
+ return -EBUSY;

if (!PageHuge(page))
continue;
--
2.23.0