mm, hwpoison: add is_free_buddy_page() in HWPoisonHandlable()
Commitfcc00621d8
("mm/hwpoison: retry with shake_page() for unhandlable pages") changed the return value of __get_hwpoison_page() to retry for transiently unhandlable cases. However, __get_hwpoison_page() currently fails to properly judge buddy pages as handlable, so hard/soft offline for buddy pages always fail as "unhandlable page". This is totally regrettable. So let's add is_free_buddy_page() in HWPoisonHandlable(), so that __get_hwpoison_page() returns different return values between buddy pages and unhandlable pages as intended. Link: https://lkml.kernel.org/r/20210909004131.163221-1-naoya.horiguchi@linux.dev Fixes:fcc00621d8
("mm/hwpoison: retry with shake_page() for unhandlable pages") Signed-off-by: Naoya Horiguchi <naoya.horiguchi@nec.com> Acked-by: David Hildenbrand <david@redhat.com> Reviewed-by: Yang Shi <shy828301@gmail.com> Cc: Tony Luck <tony.luck@intel.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Michal Hocko <mhocko@suse.com> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
7d42e98182
Коммит
acfa299a4a
|
@ -1126,7 +1126,7 @@ static int page_action(struct page_state *ps, struct page *p,
|
||||||
*/
|
*/
|
||||||
static inline bool HWPoisonHandlable(struct page *page)
|
static inline bool HWPoisonHandlable(struct page *page)
|
||||||
{
|
{
|
||||||
return PageLRU(page) || __PageMovable(page);
|
return PageLRU(page) || __PageMovable(page) || is_free_buddy_page(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __get_hwpoison_page(struct page *page)
|
static int __get_hwpoison_page(struct page *page)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче