mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 09:16:33 +00:00
mm/memory-failure: convert __get_huge_page_for_hwpoison() to folios
Patch series "convert hugepage memory failure functions to folios". This series contains a 1:1 straightforward page to folio conversion for memory failure functions which deal with huge pages. I renamed a few functions to fit with how other folio operating functions are named. These include: hugetlb_clear_page_hwpoison -> folio_clear_hugetlb_hwpoison free_raw_hwp_pages -> folio_free_raw_hwp __free_raw_hwp_pages -> __folio_free_raw_hwp hugetlb_set_page_hwpoison -> folio_set_hugetlb_hwpoison The goal of this series was to reduce users of the hugetlb specific page flag macros which take in a page so users are protected by the compiler to make sure they are operating on a head page. This patch (of 8): Use a folio throughout the function rather than using a head page. This also reduces the users of the page version of hugetlb specific page flags. Link: https://lkml.kernel.org/r/20230112204608.80136-2-sidhartha.kumar@oracle.com Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com> Acked-by: Naoya Horiguchi <naoya.horiguchi@nec.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Miaohe Lin <linmiaohe@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
1e15d374bb
commit
4c110ec98e
@ -1807,20 +1807,20 @@ int __get_huge_page_for_hwpoison(unsigned long pfn, int flags,
|
||||
bool *migratable_cleared)
|
||||
{
|
||||
struct page *page = pfn_to_page(pfn);
|
||||
struct page *head = compound_head(page);
|
||||
struct folio *folio = page_folio(page);
|
||||
int ret = 2; /* fallback to normal page handling */
|
||||
bool count_increased = false;
|
||||
|
||||
if (!PageHeadHuge(head))
|
||||
if (!folio_test_hugetlb(folio))
|
||||
goto out;
|
||||
|
||||
if (flags & MF_COUNT_INCREASED) {
|
||||
ret = 1;
|
||||
count_increased = true;
|
||||
} else if (HPageFreed(head)) {
|
||||
} else if (folio_test_hugetlb_freed(folio)) {
|
||||
ret = 0;
|
||||
} else if (HPageMigratable(head)) {
|
||||
ret = get_page_unless_zero(head);
|
||||
} else if (folio_test_hugetlb_migratable(folio)) {
|
||||
ret = folio_try_get(folio);
|
||||
if (ret)
|
||||
count_increased = true;
|
||||
} else {
|
||||
@ -1829,24 +1829,24 @@ int __get_huge_page_for_hwpoison(unsigned long pfn, int flags,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (hugetlb_set_page_hwpoison(head, page)) {
|
||||
if (hugetlb_set_page_hwpoison(&folio->page, page)) {
|
||||
ret = -EHWPOISON;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Clearing HPageMigratable for hwpoisoned hugepages to prevent them
|
||||
* Clearing hugetlb_migratable for hwpoisoned hugepages to prevent them
|
||||
* from being migrated by memory hotremove.
|
||||
*/
|
||||
if (count_increased && HPageMigratable(head)) {
|
||||
ClearHPageMigratable(head);
|
||||
if (count_increased && folio_test_hugetlb_migratable(folio)) {
|
||||
folio_clear_hugetlb_migratable(folio);
|
||||
*migratable_cleared = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
out:
|
||||
if (count_increased)
|
||||
put_page(head);
|
||||
folio_put(folio);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user