Re: [PATCH 1/1] mm/zswap: enable static key after runtime pool recovery

From: Longlong Xia

Date: Sat Sep 05 2026 - 20:32:28 EST


Thanks for taking a look.

在 2026/9/6 7:09, Andrew Morton 写道:
On Sat, 5 Sep 2026 20:50:28 +0800 Longlong Xia <xialonglong2025@xxxxxxx> wrote:

From: Longlong Xia <xialonglong@xxxxxxxxxx>

When CONFIG_ZSWAP_DEFAULT_ON is disabled, zswap_setup() can complete
without a pool after a failed initial pool creation. A later compressor
parameter update can create and publish a pool, but does not enable
zswap_ever_enabled.

If users then enable zswap, zswap_store() intercepts swapout while
zswap_load() still returns -ENOENT without consulting the xarray. The
swapin path therefore reads a stale backing swap slot because the store
skipped writing it.
That sounds bad. I'll leave it to reviewers to suggest whether this is
a sufficient description of the runtime effects, and to decide whether
a backport is appropriate. Please.

Enable the static key after a successful compressor and pool update. Do
this outside zswap_pools_lock because static key updates may sleep.

Verified with fault injection on a stock kernel (compressor builtin,
CONFIG_ZSWAP_DEFAULT_ON=n):

1. Boot with zswap.enabled=1; pool creation fails, init completes
pool-less (static key off).
2. Echo an available compressor name to zswap.compressor; a pool is
recovered but the key stays off.
3. Enable zswap.
4. madvise(MADV_PAGEOUT) a pattern-verified 512 MiB region, then
fault it back in and verify.

Step 4 reads back 131072/131072 zeroed pages (zswpin=0, zswpout=131072)
without this patch; all pages intact (zswpin=131072) with it.
And thanks. Sashiko might have found another issue in this zswap code:
https://sashiko.dev/#/patchset/20260905125101.2970456-1-xialonglong2025@xxxxxxx

I'll send a separate fix patch.


Thanks,

Longlong