Commit db0f7945 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Nanyong Sun
Browse files

khugepaged: convert alloc_charge_hpage to alloc_charge_folio

mainline inclusion
from mainline-v6.10-rc1
commit d5ab50b9412c0bba750eef5a34fd2937de1aee55
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAXCD2

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d5ab50b9412c0bba750eef5a34fd2937de1aee55

--------------------------------

Both callers want to deal with a folio, so return a folio from this
function.

Link: https://lkml.kernel.org/r/20240403171838.1445826-3-willy@infradead.org


Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarNanyong Sun <sunnanyong@huawei.com>
parent d589218d
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -1073,7 +1073,7 @@ static int __collapse_huge_page_swapin(struct mm_struct *mm,
	return result;
}

static int alloc_charge_hpage(struct page **hpage, struct mm_struct *mm,
static int alloc_charge_folio(struct folio **foliop, struct mm_struct *mm,
			      struct collapse_control *cc)
{
	gfp_t gfp = (cc->is_khugepaged ? alloc_hugepage_khugepaged_gfpmask() :
@@ -1086,7 +1086,7 @@ static int alloc_charge_hpage(struct page **hpage, struct mm_struct *mm,

	folio = __folio_alloc(gfp, HPAGE_PMD_ORDER, node, &cc->alloc_nmask);
	if (!folio) {
		*hpage = NULL;
		*foliop = NULL;
		count_vm_event(THP_COLLAPSE_ALLOC_FAILED);
		return SCAN_ALLOC_HUGE_PAGE_FAIL;
	}
@@ -1094,13 +1094,13 @@ static int alloc_charge_hpage(struct page **hpage, struct mm_struct *mm,
	count_vm_event(THP_COLLAPSE_ALLOC);
	if (unlikely(mem_cgroup_charge(folio, mm, gfp))) {
		folio_put(folio);
		*hpage = NULL;
		*foliop = NULL;
		return SCAN_CGROUP_CHARGE_FAIL;
	}

	count_memcg_folio_events(folio, THP_COLLAPSE_ALLOC, 1);

	*hpage = folio_page(folio, 0);
	*foliop = folio;
	return SCAN_SUCCEED;
}

@@ -1129,7 +1129,8 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address,
	 */
	mmap_read_unlock(mm);

	result = alloc_charge_hpage(&hpage, mm, cc);
	result = alloc_charge_folio(&folio, mm, cc);
	hpage = &folio->page;
	if (result != SCAN_SUCCEED)
		goto out_nolock;

@@ -1232,7 +1233,6 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address,
	if (unlikely(result != SCAN_SUCCEED))
		goto out_up_write;

	folio = page_folio(hpage);
	/*
	 * The smp_wmb() inside __folio_mark_uptodate() ensures the
	 * copy_huge_page writes become visible before the set_pmd_at()
@@ -1827,7 +1827,7 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr,
	struct page *hpage;
	struct page *page;
	struct page *tmp;
	struct folio *folio;
	struct folio *folio, *new_folio;
	pgoff_t index = 0, end = start + HPAGE_PMD_NR;
	LIST_HEAD(pagelist);
	XA_STATE_ORDER(xas, &mapping->i_pages, start, HPAGE_PMD_ORDER);
@@ -1838,7 +1838,8 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr,
	VM_BUG_ON(!IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) && !is_shmem);
	VM_BUG_ON(start & (HPAGE_PMD_NR - 1));

	result = alloc_charge_hpage(&hpage, mm, cc);
	result = alloc_charge_folio(&new_folio, mm, cc);
	hpage = &new_folio->page;
	if (result != SCAN_SUCCEED)
		goto out;