From: Usama Arif <usama.arif@linux.dev>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: yosry@kernel.org, chengming.zhou@linux.dev, hannes@cmpxchg.org,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
nphamcs@gmail.com, kernel-team@meta.com, stable@vger.kernel.org,
Alexandre Ghiti <alex@ghiti.fr>
Subject: Re: [PATCH] mm: zswap: don't fail a large-folio swapin whose range is not in zswap
Date: Thu, 10 Sep 2026 11:11:50 +0100 [thread overview]
Message-ID: <7975ef1f-8d2d-4be3-b206-7c6326bed2db@linux.dev> (raw)
In-Reply-To: <20260909194712.706fb2e87a6e59097424c31d@linux-foundation.org>
On 10/09/2026 03:47, Andrew Morton wrote:
> On Mon, 7 Sep 2026 09:19:38 -0700 Usama Arif <usama.arif@linux.dev> wrote:
>
>> thp_swapin_suitable_orders() and shmem_swap_alloc_folio() sample
>> zswap_never_enabled() to decide whether a swapin may use a large folio.
>> zswap_load() samples the same one-way static key again once the read
>> reaches it. Nothing serialises the two reads, and in between the task
>> allocates and pins a high-order folio, which can sleep.
>>
>> If zswap is enabled for the first time in that window, a large folio that
>> was correctly permitted reaches zswap_load(), which rejects every large
>> folio with -EINVAL. swap_read_folio() treats anything other than -ENOENT
>> as "zswap handled it" and skips the backing-device read, so the folio
>> comes back unlocked and not uptodate: SIGBUS for an anonymous fault, -EIO
>> for shmem. The data is intact on the swap device - it was written there
>> before zswap was ever enabled - and the not-uptodate folio stays in the
>> swap cache, so every retry of the fault fails the same way. With
>> panic_on_warn the WARN takes the machine down rather than the task.
>>
>> Scan the range instead of rejecting the folio. The caller has pinned
>> every slot before issuing the read, so zswap cannot start a store or a
>> writeback into the range and the scan is stable. If nothing in the range
>> is in zswap it is all on the backing device: return -ENOENT and let
>> swap_read_folio() read it.
>>
>> A range that does have a slot in zswap is still refused, because zswap
>> stores large folios as order-0 entries and cannot reconstruct one. That
>> stays reachable - a slot shared with another task can be stored inside
>> the same window - and refusing is correct, since the alternative is
>> returning the stale device copy. Report it as -EIO rather than -EINVAL:
>> the request is valid, zswap just cannot serve it. The only caller
>> distinguishes -ENOENT from everything else, so that part is a
>> documentation fix.
>
> So to hit this bug the user needs to enable zswap system-wide during a
> teeny race window in the swapin code?
>
> I suspect nobody has ever hit this and couldn't do so if they tried?
Yes, I think it would be very very difficult to hit this.
It was part of my PMD swap series, where its actually needed for the feature.
I think we can drop cc:stable, unless you think its needed Yosry?
>
>> Fixes: 242d12c98174 ("mm: support large folios swap-in for sync io devices")
>> Cc: stable@vger.kernel.org
>
>
> Documentation/process/stable-kernel-rules.rst, with which I agree:
>
> Rules on what kind of patches are accepted, and which ones are not, into the
> "-stable" tree:
>
> - It or an equivalent fix must already exist in Linux mainline (upstream).
> - It must be obviously correct and tested.
> - It cannot be bigger than 100 lines, with context.
> - It must follow the
> :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`
> rules.
> - It must either fix a real bug that bothers people or just add a device ID.
> To elaborate on the former:
>
> - It fixes a problem like an oops, a hang, data corruption, a real security
> issue, a hardware quirk, a build error (but not for things marked
> CONFIG_BROKEN), or some "oh, that's not good" issue.
> - Serious issues as reported by a user of a distribution kernel may also
> be considered if they fix a notable performance or interactivity issue.
> As these fixes are not as obvious and have a higher risk of a subtle
> regression they should only be submitted by a distribution kernel
> maintainer and include an addendum linking to a bugzilla entry if it
> exists and additional information on the user-visible impact.
> - No "This could be a problem..." type of things like a "theoretical race
> condition", unless an explanation of how the bug can be exploited is also
> provided.
> - No "trivial" fixes without benefit for users (spelling changes, whitespace
> cleanups, etc).
>
>
> If this patch meets the above then its changelog needs an update!
next prev parent reply other threads:[~2026-09-10 10:11 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-07 16:19 [PATCH] mm: zswap: don't fail a large-folio swapin whose range is not in zswap Usama Arif
2026-09-08 8:10 ` Yosry Ahmed
2026-09-09 18:14 ` Nhat Pham
2026-09-10 2:47 ` Andrew Morton
2026-09-10 10:11 ` Usama Arif [this message]
2026-09-10 10:20 ` Yosry Ahmed
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=7975ef1f-8d2d-4be3-b206-7c6326bed2db@linux.dev \
--to=usama.arif@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=alex@ghiti.fr \
--cc=chengming.zhou@linux.dev \
--cc=hannes@cmpxchg.org \
--cc=kernel-team@meta.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=nphamcs@gmail.com \
--cc=stable@vger.kernel.org \
--cc=yosry@kernel.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.