mm, hwpoison: avoid trying to unpoison reserved page
For reserved pages, HWPoison flag will be set without increasing the page refcnt. So we shouldn't even try to unpoison these pages and thus decrease the page refcnt unexpectly. Add a PageReserved() check to filter this case out and remove the below unneeded zero page (zero page is reserved) check. Link: https://lkml.kernel.org/r/20220818130016.45313-7-linmiaohe@huawei.com Signed-off-by: Miaohe Lin <linmiaohe@huawei.com> Acked-by: Naoya Horiguchi <naoya.horiguchi@nec.com> Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
0792a4a619
commit
e9ff3ba7ff
@ -2351,7 +2351,7 @@ int unpoison_memory(unsigned long pfn)
|
||||
goto unlock_mutex;
|
||||
}
|
||||
|
||||
if (PageSlab(page) || PageTable(page))
|
||||
if (PageSlab(page) || PageTable(page) || PageReserved(page))
|
||||
goto unlock_mutex;
|
||||
|
||||
ret = get_hwpoison_page(p, MF_UNPOISON);
|
||||
@ -2382,7 +2382,7 @@ int unpoison_memory(unsigned long pfn)
|
||||
freeit = !!TestClearPageHWPoison(p);
|
||||
|
||||
put_page(page);
|
||||
if (freeit && !(pfn == my_zero_pfn(0) && page_count(p) == 1)) {
|
||||
if (freeit) {
|
||||
put_page(page);
|
||||
ret = 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user