When get_hwpoison_page() returns a negative value, distinguish
reserved pages from other failure cases by reporting MF_MSG_KERNEL
instead of MF_MSG_GET_HWPOISON. Reserved pages belong to the kernel
and should be classified accordingly for proper handling.

Acked-by: Miaohe Lin <[email protected]>
Signed-off-by: Breno Leitao <[email protected]>
---
 mm/memory-failure.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index ee42d43613097..7b67e43dafbd1 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -2432,7 +2432,16 @@ int memory_failure(unsigned long pfn, int flags)
                }
                goto unlock_mutex;
        } else if (res < 0) {
-               res = action_result(pfn, MF_MSG_GET_HWPOISON, MF_IGNORED);
+               /*
+                * PageReserved is stable here: reserved pages have
+                * PG_reserved set at boot or by drivers and are never
+                * freed through the page allocator.
+                */
+               if (PageReserved(p))
+                       res = action_result(pfn, MF_MSG_KERNEL, MF_IGNORED);
+               else
+                       res = action_result(pfn, MF_MSG_GET_HWPOISON,
+                                           MF_IGNORED);
                goto unlock_mutex;
        }
 

-- 
2.52.0


Reply via email to