From: Chris Li <chrisl@kernel.org>
To: Kairui Song <ryncsn@gmail.com>
Cc: Barry Song <21cnbao@gmail.com>,
linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>,
Baoquan He <bhe@redhat.com>, Nhat Pham <nphamcs@gmail.com>,
Yosry Ahmed <yosry.ahmed@linux.dev>,
David Hildenbrand <david@kernel.org>,
Johannes Weiner <hannes@cmpxchg.org>,
Youngjun Park <youngjun.park@lge.com>,
Hugh Dickins <hughd@google.com>,
Baolin Wang <baolin.wang@linux.alibaba.com>,
Ying Huang <ying.huang@linux.alibaba.com>,
Kemeng Shi <shikemeng@huaweicloud.com>,
Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
"Matthew Wilcox (Oracle)" <willy@infradead.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 02/19] mm, swap: split swap cache preparation loop into a standalone helper
Date: Sat, 22 Nov 2025 00:50:35 -0800 [thread overview]
Message-ID: <CACePvbXbx2bT3K4KZMAh3yLuC1p0j80DS3XJfPHChVkqNJkLmA@mail.gmail.com> (raw)
In-Reply-To: <CAMgjq7AKWEqzHtMFWcKPCxWtc7jE1j9qGOQ3izsxRef9FCd_+Q@mail.gmail.com>
On Mon, Nov 17, 2025 at 2:04 AM Kairui Song <ryncsn@gmail.com> wrote:
>
> On Mon, Nov 17, 2025 at 4:27 PM Barry Song <21cnbao@gmail.com> wrote:
> >
> > On Mon, Nov 17, 2025 at 2:12 AM Kairui Song <ryncsn@gmail.com> wrote:
> > >
> > > From: Kairui Song <kasong@tencent.com>
> > >
> > > To prepare for the removal of swap cache bypass swapin, introduce a new
> > > helper that accepts an allocated and charged fresh folio, prepares the
> > > folio, the swap map, and then adds the folio to the swap cache.
> > >
> > > This doesn't change how swap cache works yet, we are still depending on
> > > the SWAP_HAS_CACHE in the swap map for synchronization. But all
> > > synchronization hacks are now all in this single helper.
> > >
> > > No feature change.
> > >
> > > Signed-off-by: Kairui Song <kasong@tencent.com>
> >
> > Overall,
> > Reviewed-by: Barry Song <baohua@kernel.org>
> > with a few minor nits.
> >
> > > ---
> > > mm/swap_state.c | 197 +++++++++++++++++++++++++++++++-------------------------
> > > 1 file changed, 109 insertions(+), 88 deletions(-)
> > >
> > > diff --git a/mm/swap_state.c b/mm/swap_state.c
> > > index 08252eaef32f..7b93704fcbe7 100644
> > > --- a/mm/swap_state.c
> > > +++ b/mm/swap_state.c
> > > @@ -402,6 +402,97 @@ void swap_update_readahead(struct folio *folio, struct vm_area_struct *vma,
> > > }
> > > }
> > >
> > > +/**
> > > + * __swap_cache_prepare_and_add - Prepare the folio and add it to swap cache.
> > > + * @entry: swap entry to be bound to the folio.
> > > + * @folio: folio to be added.
> > > + * @gfp: memory allocation flags for charge, can be 0 if @charged if true.
> > > + * @charged: if the folio is already charged.
> > > + * @skip_if_exists: if the slot is in a cached state, return NULL.
> > > + * This is an old workaround that will be removed shortly.
> > > + *
> > > + * Update the swap_map and add folio as swap cache, typically before swapin.
> > > + * All swap slots covered by the folio must have a non-zero swap count.
> > > + *
> > > + * Context: Caller must protect the swap device with reference count or locks.
> > > + * Return: Returns the folio being added on success. Returns the existing
> > > + * folio if @entry is cached. Returns NULL if raced with swapin or swapoff.
> >
> > Not a native speaker, but I wonder if adding *already* would make the
> > comment clearer, for example: "Returns the existing folio if @entry is
> > already cached."
>
> Agree, that sounds better, thanks!
>
> >
> > BTW, returning NULL may not be the best option. Returning an ERR_PTR
> > seems more specific?
>
> I also don't like the idea of returning NULL, but all existing callers
> are all using this convention already. To not introduce too much
> noise, this maybe better be cleaned up / changed after this series I
> think.
There is only one possible error condition to return NULL there, it is
fine to stay as NULL. The caller only cares about whether it has an
error or not rather than which error anyway. Not a big deal.
Acked-by: Chris Li <chrisl@kernel.org>
Chris
next prev parent reply other threads:[~2025-11-22 8:50 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-16 18:11 [PATCH v2 00/19] mm, swap: swap table phase II: unify swapin use swap cache and cleanup flags Kairui Song
2025-11-16 18:11 ` [PATCH v2 01/19] mm, swap: rename __read_swap_cache_async to swap_cache_alloc_folio Kairui Song
2025-11-17 4:36 ` Nhat Pham
2025-11-17 8:11 ` Barry Song
2025-11-22 8:39 ` Chris Li
2025-11-16 18:11 ` [PATCH v2 02/19] mm, swap: split swap cache preparation loop into a standalone helper Kairui Song
2025-11-17 8:27 ` Barry Song
2025-11-17 10:04 ` Kairui Song
2025-11-22 8:50 ` Chris Li [this message]
2025-11-16 18:11 ` [PATCH v2 03/19] mm, swap: never bypass the swap cache even for SWP_SYNCHRONOUS_IO Kairui Song
2025-11-21 0:55 ` Barry Song
2025-11-21 2:41 ` Kairui Song
2025-11-21 4:56 ` Barry Song
2025-11-21 5:38 ` Kairui Song
2025-11-16 18:11 ` [PATCH v2 04/19] mm, swap: always try to free swap cache for SWP_SYNCHRONOUS_IO devices Kairui Song
2025-11-16 18:11 ` [PATCH v2 05/19] mm, swap: simplify the code and reduce indention Kairui Song
2025-11-16 18:11 ` [PATCH v2 06/19] mm, swap: free the swap cache after folio is mapped Kairui Song
2025-11-16 18:11 ` [PATCH v2 07/19] mm/shmem: never bypass the swap cache for SWP_SYNCHRONOUS_IO Kairui Song
2025-11-16 18:11 ` [PATCH v2 08/19] mm/shmem, swap: remove SWAP_MAP_SHMEM Kairui Song
2025-11-16 18:11 ` [PATCH v2 09/19] mm, swap: swap entry of a bad slot should not be considered as swapped out Kairui Song
2025-11-16 18:11 ` [PATCH v2 10/19] mm, swap: consolidate cluster reclaim and check logic Kairui Song
2025-11-20 6:47 ` YoungJun Park
2025-11-20 15:32 ` Kairui Song
2025-11-21 6:58 ` YoungJun Park
2025-11-20 7:11 ` YoungJun Park
2025-11-20 7:13 ` YoungJun Park
2025-11-20 15:24 ` Kairui Song
2025-11-16 18:11 ` [PATCH v2 11/19] mm, swap: split locked entry duplicating into a standalone helper Kairui Song
2025-11-16 18:11 ` [PATCH v2 12/19] mm, swap: use swap cache as the swap in synchronize layer Kairui Song
2025-11-16 18:11 ` [PATCH v2 13/19] mm, swap: remove workaround for unsynchronized swap map cache state Kairui Song
2025-11-16 18:11 ` [PATCH v2 14/19] mm, swap: sanitize swap entry management workflow Kairui Song
2025-11-17 11:23 ` kernel test robot
2025-11-17 13:05 ` Kairui Song
2025-11-16 18:11 ` [PATCH v2 15/19] mm, swap: add folio to swap cache directly on allocation Kairui Song
2025-11-16 18:11 ` [PATCH v2 16/19] mm, swap: check swap table directly for checking cache Kairui Song
2025-11-16 18:11 ` [PATCH v2 17/19] mm, swap: clean up and improve swap entries freeing Kairui Song
2025-11-16 18:11 ` [PATCH v2 18/19] mm, swap: drop the SWAP_HAS_CACHE flag Kairui Song
2025-11-17 11:01 ` kernel test robot
2025-11-17 11:22 ` kernel test robot
2025-11-17 13:30 ` Kairui Song
2025-11-16 18:12 ` [PATCH v2 19/19] mm, swap: remove no longer needed _swap_info_get Kairui Song
2025-11-17 3:21 ` [PATCH v2 00/19] mm, swap: swap table phase II: unify swapin use swap cache and cleanup flags 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=CACePvbXbx2bT3K4KZMAh3yLuC1p0j80DS3XJfPHChVkqNJkLmA@mail.gmail.com \
--to=chrisl@kernel.org \
--cc=21cnbao@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=bhe@redhat.com \
--cc=david@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=hughd@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=nphamcs@gmail.com \
--cc=ryncsn@gmail.com \
--cc=shikemeng@huaweicloud.com \
--cc=willy@infradead.org \
--cc=ying.huang@linux.alibaba.com \
--cc=yosry.ahmed@linux.dev \
--cc=youngjun.park@lge.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox