From: Baolin Wang <baolin.wang@linux.alibaba.com>
To: Kairui Song <kasong@tencent.com>, linux-mm@kvack.org
Cc: Andrew Morton <akpm@linux-foundation.org>,
Hugh Dickins <hughd@google.com>,
Matthew Wilcox <willy@infradead.org>,
Kemeng Shi <shikemeng@huaweicloud.com>,
Chris Li <chrisl@kernel.org>, Nhat Pham <nphamcs@gmail.com>,
Baoquan He <bhe@redhat.com>, Barry Song <baohua@kernel.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 3/7] mm/shmem, swap: tidy up THP swapin checks
Date: Mon, 30 Jun 2025 12:47:43 +0800 [thread overview]
Message-ID: <00b95366-aa42-4051-9457-04a009aedbb2@linux.alibaba.com> (raw)
In-Reply-To: <20250627062020.534-4-ryncsn@gmail.com>
On 2025/6/27 14:20, Kairui Song wrote:
> From: Kairui Song <kasong@tencent.com>
>
> Move all THP swapin related checks under CONFIG_TRANSPARENT_HUGEPAGE,
> so they will be trimmed off by the compiler if not needed.
>
> And add a WARN if shmem sees a order > 0 entry when
> CONFIG_TRANSPARENT_HUGEPAGE is disabled, that should never happen unless
> things went very wrong.
>
> There should be no observable feature change except the new added WARN.
>
> Signed-off-by: Kairui Song <kasong@tencent.com>
LGTM. Thanks.
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
> ---
> mm/shmem.c | 42 ++++++++++++++++++++----------------------
> 1 file changed, 20 insertions(+), 22 deletions(-)
>
> diff --git a/mm/shmem.c b/mm/shmem.c
> index 033dc7a3435d..f85a985167c5 100644
> --- a/mm/shmem.c
> +++ b/mm/shmem.c
> @@ -1980,26 +1980,39 @@ static struct folio *shmem_swap_alloc_folio(struct inode *inode,
> swp_entry_t entry, int order, gfp_t gfp)
> {
> struct shmem_inode_info *info = SHMEM_I(inode);
> + int nr_pages = 1 << order;
> struct folio *new;
> void *shadow;
> - int nr_pages;
>
> /*
> * We have arrived here because our zones are constrained, so don't
> * limit chance of success with further cpuset and node constraints.
> */
> gfp &= ~GFP_CONSTRAINT_MASK;
> - if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) && order > 0) {
> - gfp_t huge_gfp = vma_thp_gfp_mask(vma);
> -
> - gfp = limit_gfp_mask(huge_gfp, gfp);
> + if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
> + if (WARN_ON_ONCE(order))
> + return ERR_PTR(-EINVAL);
> + } else if (order) {
> + /*
> + * If uffd is active for the vma, we need per-page fault
> + * fidelity to maintain the uffd semantics, then fallback
> + * to swapin order-0 folio, as well as for zswap case.
> + * Any existing sub folio in the swap cache also blocks
> + * mTHP swapin.
> + */
> + if ((vma && unlikely(userfaultfd_armed(vma))) ||
> + !zswap_never_enabled() ||
> + non_swapcache_batch(entry, nr_pages) != nr_pages) {
> + return ERR_PTR(-EINVAL);
> + } else {
> + gfp = limit_gfp_mask(vma_thp_gfp_mask(vma), gfp);
> + }
> }
>
> new = shmem_alloc_folio(gfp, order, info, index);
> if (!new)
> return ERR_PTR(-ENOMEM);
>
> - nr_pages = folio_nr_pages(new);
> if (mem_cgroup_swapin_charge_folio(new, vma ? vma->vm_mm : NULL,
> gfp, entry)) {
> folio_put(new);
> @@ -2283,9 +2296,6 @@ static int shmem_swapin_folio(struct inode *inode, pgoff_t index,
> /* Look it up and read it in.. */
> folio = swap_cache_get_folio(swap, NULL, 0);
> if (!folio) {
> - int nr_pages = 1 << order;
> - bool fallback_order0 = false;
> -
> /* Or update major stats only when swapin succeeds?? */
> if (fault_type) {
> *fault_type |= VM_FAULT_MAJOR;
> @@ -2293,20 +2303,8 @@ static int shmem_swapin_folio(struct inode *inode, pgoff_t index,
> count_memcg_event_mm(fault_mm, PGMAJFAULT);
> }
>
> - /*
> - * If uffd is active for the vma, we need per-page fault
> - * fidelity to maintain the uffd semantics, then fallback
> - * to swapin order-0 folio, as well as for zswap case.
> - * Any existing sub folio in the swap cache also blocks
> - * mTHP swapin.
> - */
> - if (order > 0 && ((vma && unlikely(userfaultfd_armed(vma))) ||
> - !zswap_never_enabled() ||
> - non_swapcache_batch(swap, nr_pages) != nr_pages))
> - fallback_order0 = true;
> -
> /* Skip swapcache for synchronous device. */
> - if (!fallback_order0 && data_race(si->flags & SWP_SYNCHRONOUS_IO)) {
> + if (data_race(si->flags & SWP_SYNCHRONOUS_IO)) {
> folio = shmem_swap_alloc_folio(inode, vma, index, swap, order, gfp);
> if (!IS_ERR(folio)) {
> skip_swapcache = true;
next prev parent reply other threads:[~2025-06-30 4:47 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-27 6:20 [PATCH v3 0/7] mm/shmem, swap: bugfix and improvement of mTHP swap in Kairui Song
2025-06-27 6:20 ` [PATCH v3 1/7] mm/shmem, swap: improve cached mTHP handling and fix potential hung Kairui Song
2025-06-30 3:44 ` Baolin Wang
2025-06-27 6:20 ` [PATCH v3 2/7] mm/shmem, swap: avoid redundant Xarray lookup during swapin Kairui Song
2025-06-27 6:20 ` [PATCH v3 3/7] mm/shmem, swap: tidy up THP swapin checks Kairui Song
2025-06-30 4:47 ` Baolin Wang [this message]
2025-06-27 6:20 ` [PATCH v3 4/7] mm/shmem, swap: clean up swap entry splitting Kairui Song
2025-06-30 6:34 ` Baolin Wang
2025-06-30 9:16 ` Kairui Song
2025-06-30 9:53 ` Baolin Wang
2025-06-30 10:06 ` Kairui Song
2025-06-30 11:59 ` Baolin Wang
2025-06-30 18:19 ` Kairui Song
2025-07-01 1:57 ` Baolin Wang
2025-07-01 18:49 ` Kairui Song
2025-07-02 2:33 ` Baolin Wang
2025-06-27 6:20 ` [PATCH v3 5/7] mm/shmem, swap: never use swap cache and readahead for SWP_SYNCHRONOUS_IO Kairui Song
2025-06-30 7:24 ` Baolin Wang
2025-06-27 6:20 ` [PATCH v3 6/7] mm/shmem, swap: fix major fault counting Kairui Song
2025-06-30 7:05 ` Baolin Wang
2025-06-27 6:20 ` [PATCH v3 7/7] mm/shmem, swap: avoid false positive swap cache lookup Kairui Song
2025-06-30 7:21 ` Baolin Wang
2025-06-30 9:17 ` Kairui Song
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=00b95366-aa42-4051-9457-04a009aedbb2@linux.alibaba.com \
--to=baolin.wang@linux.alibaba.com \
--cc=akpm@linux-foundation.org \
--cc=baohua@kernel.org \
--cc=bhe@redhat.com \
--cc=chrisl@kernel.org \
--cc=hughd@google.com \
--cc=kasong@tencent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=nphamcs@gmail.com \
--cc=shikemeng@huaweicloud.com \
--cc=willy@infradead.org \
/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.