Re: [PATCH v4] mm: Use a folio in the softleaf_is_device_private path

Anshuman Khandual <[email protected]> Mon, 3 Aug 2026 11:55:36 +0530
Newsgroups org.kvack.linux-mm,org.kernel.vger.linux-kernel
Message-ID <meghpao4fryw6y5qrzk2y4576pkv7clzclf4tmg655lnp7tm2u@2juxush73364>
On Mon, Aug 03, 2026 at 11:15:54AM +0800, Hongfu Li wrote:
> From: Hongfu Li <[email protected]>
> 
> Use the folio APIs in the device_private migration path of do_swap_page(),
> replacing four calls to compound_head() with one.
> 
> Signed-off-by: Hongfu Li <[email protected]>
> Acked-by: David Hildenbrand (Arm) <[email protected]>
> Reviewed-by: Lorenzo Stoakes (ARM) <[email protected]>

Reviewed-by: Anshumman Khandual <[email protected]>

> ---
> v4:
> - Drop the do_non_swap_page() extraction (patch 2/2 from v2)
> - Added Reviewed-by: Lorenzo Stoakes
> - Link to v2: https://lore.kernel.org/all/[email protected]/
> v3:
> - Please ignore v3.
> v2:
> - Drop fault_folio, reuse the existing folio variable instead
> - Refresh commit messages
> - Update comment to use "folio" instead of "page" in the
>   device_private path
> - Add Acked-by: David Hildenbrand
> - Add patch 2/2 to extract do_non_swap_page() from do_swap_page()
> - Link to v1: https://lore.kernel.org/all/[email protected]/
> ---
>  mm/memory.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/mm/memory.c b/mm/memory.c
> index 56b244552f13..bbb289ba09d3 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -4873,18 +4873,19 @@ vm_fault_t do_swap_page(struct vm_fault *vmf)
>  				goto unlock;
>  
>  			/*
> -			 * Get a page reference while we know the page can't be
> +			 * Get a folio reference while we know the folio can't be
>  			 * freed.
>  			 */
> -			if (trylock_page(vmf->page)) {
> +			folio = page_folio(vmf->page);
> +			if (folio_trylock(folio)) {
>  				struct dev_pagemap *pgmap;
>  
> -				get_page(vmf->page);
> +				folio_get(folio);
>  				pte_unmap_unlock(vmf->pte, vmf->ptl);
>  				pgmap = page_pgmap(vmf->page);
>  				ret = pgmap->ops->migrate_to_ram(vmf);
> -				unlock_page(vmf->page);
> -				put_page(vmf->page);
> +				folio_unlock(folio);
> +				folio_put(folio);
>  			} else {
>  				pte_unmap(vmf->pte);
>  				softleaf_entry_wait_on_locked(entry, vmf->ptl);
> -- 
> 2.54.0
>