Commit a44eb602 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Kefeng Wang
Browse files

mm/khugepaged: use a folio more in collapse_file()

mainline inclusion
from mainline-v6.8-rc1
commit b54d60b18e850561e8bdb4264ae740676c3b7658
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I9Q9DF
CVE: NA

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

This function is not yet fully converted to the folio API, but this
removes a few uses of old APIs.

Link: https://lkml.kernel.org/r/20231228085748.1083901-6-willy@infradead.org


Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: default avatarZi Yan <ziy@nvidia.com>
Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
(cherry picked from commit b54d60b18e850561e8bdb4264ae740676c3b7658)
Signed-off-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
parent ca21002a
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -2147,23 +2147,23 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr,
		xas_lock_irq(&xas);
	}

	nr = thp_nr_pages(hpage);
	folio = page_folio(hpage);
	nr = folio_nr_pages(folio);
	if (is_shmem)
		__mod_lruvec_page_state(hpage, NR_SHMEM_THPS, nr);
		__lruvec_stat_mod_folio(folio, NR_SHMEM_THPS, nr);
	else
		__mod_lruvec_page_state(hpage, NR_FILE_THPS, nr);
		__lruvec_stat_mod_folio(folio, NR_FILE_THPS, nr);

	if (nr_none) {
		__mod_lruvec_page_state(hpage, NR_FILE_PAGES, nr_none);
		__lruvec_stat_mod_folio(folio, NR_FILE_PAGES, nr_none);
		/* nr_none is always 0 for non-shmem. */
		__mod_lruvec_page_state(hpage, NR_SHMEM, nr_none);
		__lruvec_stat_mod_folio(folio, NR_SHMEM, nr_none);
	}

	/*
	 * Mark hpage as uptodate before inserting it into the page cache so
	 * that it isn't mistaken for an fallocated but unwritten page.
	 */
	folio = page_folio(hpage);
	folio_mark_uptodate(folio);
	folio_ref_add(folio, HPAGE_PMD_NR - 1);

@@ -2173,7 +2173,7 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr,

	/* Join all the small entries into a single multi-index entry. */
	xas_set_order(&xas, start, HPAGE_PMD_ORDER);
	xas_store(&xas, hpage);
	xas_store(&xas, folio);
	WARN_ON_ONCE(xas_error(&xas));
	xas_unlock_irq(&xas);

@@ -2184,7 +2184,7 @@ static int collapse_file(struct mm_struct *mm, unsigned long addr,
	retract_page_tables(mapping, start);
	if (cc && !cc->is_khugepaged)
		result = SCAN_PTE_MAPPED_HUGEPAGE;
	unlock_page(hpage);
	folio_unlock(folio);

	/*
	 * The collapse has succeeded, so free the old pages.