All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kiryl Shutsemau <kas@kernel.org>
To: kasong@tencent.com
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	 Andrew Morton <akpm@linux-foundation.org>,
	David Hildenbrand <david@kernel.org>,
	 Lorenzo Stoakes <ljs@kernel.org>, Zi Yan <ziy@nvidia.com>,
	 Baolin Wang <baolin.wang@linux.alibaba.com>,
	"Liam R. Howlett" <liam@infradead.org>,
	 Nico Pache <nico.pache@linux.dev>,
	Ryan Roberts <ryan.roberts@arm.com>, Dev Jain <dev.jain@arm.com>,
	 Lance Yang <lance.yang@linux.dev>,
	Usama Arif <usama.arif@linux.dev>,
	 Vlastimil Babka <vbabka@kernel.org>,
	Mike Rapoport <rppt@kernel.org>,
	 Suren Baghdasaryan <surenb@google.com>,
	Michal Hocko <mhocko@suse.com>, Chris Li <chrisl@kernel.org>,
	 Kemeng Shi <shikemeng@huaweicloud.com>,
	Nhat Pham <nphamcs@gmail.com>, Baoquan He <baoquan.he@linux.dev>,
	 Barry Song <baohua@kernel.org>,
	Youngjun Park <youngjun.park@lge.com>,
	 Yeoreum Yun <yeoreum.yun@arm.com>,
	Shivam Kalra <shivamkalra98@zohomail.in>,
	 Kairui Song <ryncsn@gmail.com>
Subject: Re: [PATCH v4 12/17] mm/huge_memory: move anon_vma handling into the anon split helper
Date: Tue, 8 Sep 2026 16:56:11 +0100	[thread overview]
Message-ID: <aqAvPuHUVXvkJmV4@thinkstation> (raw)
In-Reply-To: <20260908-swap-thp-cleanup-v4-12-b532a3f20e71@tencent.com>

On Tue, Sep 08, 2026 at 02:12:16AM +0800, Kairui Song via B4 Relay wrote:
> +	/*
> +	 * Unmap/remap needs the anon_vma. The caller does not necessarily
> +	 * hold an mmap_lock that would prevent the anon_vma from
> +	 * disappearing, so we first take a reference and lock it.
> +	 *
> +	 * An unmapped folio needs none of this: folio_get_anon_vma() and
> +	 * folio_lock_anon_vma_read() both bail out on !folio_mapped()
> +	 * before taking the lock, and folio_ref_freeze() below still
> +	 * rejects a folio that picked up a reference meanwhile. Note
> +	 * a swapped-out THP counts as unmapped here as swap PTEs do
> +	 * not contribute mapcount, and they are splittable.
> +	 */
>  	if (folio_mapped(folio)) {
> -		need_remap = true;
> +		anon_vma = folio_get_anon_vma(folio);
> +		if (!anon_vma)
> +			return -EBUSY;
> +		anon_vma_lock_write(anon_vma);
>  		ret = unmap_folio(folio);
>  		if (ret)
> -			return ret;
> +			goto out_unlock;
>  	}

Hm. Nothing serializes folio_mapped() here. I believe it is fine, but the
reasoning deserves a comment, since it is what the whole change rests on.
Something along the lines of:

       * folio_mapped() is not stable here, but it can only change in
       * one direction while the folio is locked. The mapcount can drop
       * to zero at any time, zap_pte_range() takes no folio lock. It
       * cannot go up: swapin, migration and uffd move all lock the folio
       * before mapping it, and fork only copies PTEs that already exist.
       *
       * So if we see the folio mapped, the worst case is an empty rmap
       * walk. If we see it unmapped, it stays unmapped. Anything else
       * needs a reference first and folio_ref_freeze() below catches it.

-- 
  Kiryl Shutsemau / Kirill A. Shutemov


  parent reply	other threads:[~2026-09-08 15:56 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-07 18:12 [PATCH v4 00/17] mm/huge_memory: clean up and decouple the anon and file split helpers Kairui Song via B4 Relay
2026-09-07 18:12 ` Kairui Song
2026-09-07 18:12 ` [PATCH v4 01/17] mm/swap: fix off-by-one in swap cache replace sanity check Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-07 18:12 ` [PATCH v4 02/17] mm/huge_memory: fix rejection of swap cache folios with a mapping Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-07 18:12 ` [PATCH v4 03/17] mm/huge_memory: invert folio_ref_freeze() check to reduce indentation Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-07 18:12 ` [PATCH v4 04/17] mm/huge_memory: split the routine for splitting anon and file folio Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-08 15:11   ` Kiryl Shutsemau
2026-09-07 18:12 ` [PATCH v4 05/17] mm/huge_memory: rename __split_unmapped_folio() to __split_frozen_folio() Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-09 17:36   ` David Hildenbrand (Arm)
2026-09-07 18:12 ` [PATCH v4 06/17] mm/huge_memory: consolidate irq and locking for folio split Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-09 17:39   ` David Hildenbrand (Arm)
2026-09-07 18:12 ` [PATCH v4 07/17] mm/huge_memory: move EOF trimming into the file split helper Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-07 18:12 ` [PATCH v4 08/17] mm/huge_memory: move unmap and remap into the split helpers Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-08 15:13   ` Kiryl Shutsemau
2026-09-07 18:12 ` [PATCH v4 09/17] mm/huge_memory: rename remap_page() to remap_folio() Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-07 19:48   ` Zi Yan
2026-09-08 15:17   ` Kiryl Shutsemau
2026-09-09 17:37     ` David Hildenbrand (Arm)
2026-09-07 18:12 ` [PATCH v4 10/17] mm/huge_memory: move the racy refcount check into unmap_folio() Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-07 19:52   ` Zi Yan
2026-09-08 15:20   ` Kiryl Shutsemau
2026-09-07 18:12 ` [PATCH v4 11/17] mm/huge_memory: move filemap management into the file split helper Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-07 19:57   ` Zi Yan
2026-09-08 15:25   ` Kiryl Shutsemau
2026-09-07 18:12 ` [PATCH v4 12/17] mm/huge_memory: move anon_vma handling into the anon " Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-07 20:39   ` Zi Yan
2026-09-08  6:32     ` Kairui Song
2026-09-08 15:56   ` Kiryl Shutsemau [this message]
2026-09-11 17:59     ` Kairui Song
2026-09-07 18:12 ` [PATCH v4 13/17] mm/huge_memory: move memcg switch into the file " Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-09  8:21   ` Kiryl Shutsemau
2026-09-07 18:12 ` [PATCH v4 14/17] mm/huge_memory: drop the unused do_lru argument of " Kairui Song
2026-09-07 18:12   ` Kairui Song via B4 Relay
2026-09-09  8:22   ` Kiryl Shutsemau
2026-09-07 18:12 ` [PATCH v4 15/17] mm/huge_memory: clean up after-split folio freeing in __folio_split Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-09  8:27   ` Kiryl Shutsemau
2026-09-07 18:12 ` [PATCH v4 16/17] mm/huge_memory: count only swap cache refs in anon folio split Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-09  8:31   ` Kiryl Shutsemau
2026-09-07 18:12 ` [PATCH v4 17/17] mm/huge_memory: drop the redundant mapping argument of __split_frozen_folio Kairui Song via B4 Relay
2026-09-07 18:12   ` Kairui Song
2026-09-09  8:32   ` Kiryl Shutsemau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aqAvPuHUVXvkJmV4@thinkstation \
    --to=kas@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=baohua@kernel.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=baoquan.he@linux.dev \
    --cc=chrisl@kernel.org \
    --cc=david@kernel.org \
    --cc=dev.jain@arm.com \
    --cc=kasong@tencent.com \
    --cc=lance.yang@linux.dev \
    --cc=liam@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=ljs@kernel.org \
    --cc=mhocko@suse.com \
    --cc=nico.pache@linux.dev \
    --cc=nphamcs@gmail.com \
    --cc=rppt@kernel.org \
    --cc=ryan.roberts@arm.com \
    --cc=ryncsn@gmail.com \
    --cc=shikemeng@huaweicloud.com \
    --cc=shivamkalra98@zohomail.in \
    --cc=surenb@google.com \
    --cc=usama.arif@linux.dev \
    --cc=vbabka@kernel.org \
    --cc=yeoreum.yun@arm.com \
    --cc=youngjun.park@lge.com \
    --cc=ziy@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.