[PATCH v7 0/3] [PATCH v7 0/3] mm/swap: use swap_ops to register swap device's methods

From: Baoquan He

Date: Thu May 14 2026 - 21:58:02 EST


This can simplify the code logic and benefit any new type of swap device
added later.

Patch 2 renames the page_io functions to a consistent
swap_<backend>_<op>_<folio> naming convention. Patch 3 fixes a
leaky abstraction where FS swap unplug bypassed swap_ops, adding
an .unplug callback and dispatcher.

Changlog:
===
v7:
- Drop the old patch 1 "[PATCH v6 1/3] mm/swap: rename mm/page_io.c
to mm/swap_io.c" as Christoph suggested.
- Add the .unplug callback to address Christoph's review about
the leaky abstraction.
- Minor cleanups and fixes per review feedback.

-v6:
- Fix a code bug Kairui found out when reviewing patch in mm/swapfile.c
in patch 2/3. Has fixed it by moving it to appropriate place and add
comment to explain.

-v5:
- Change the return value of init_swap_ops() as -EINVAL as per Chris's
suggestion and adjust its invocation in swapon() accordingly.
- Add Chris and Usama's Ack tags.

-v4:
- Fix a typo opeations -> operations
- Fix a code bug inside init_swap_ops(). I was taking a change at the
time, thought the change is trivial, so I only compiled but didn't
run kernel to test in v3. Now fix it and test passed.
Thanaks to Usama for catching the above two issues.

-v3:
- Rename setup_swap_ops() to init_swap_ops() which reflect the function
behaviour a little better
- Check if sis->ops, sis->ops->read_folio and sis->ops->write_folio is
NULL in init_swap_ops(), but not spread them where they are called.
And once the checking failed, fail swapon immediately. This is
suggested by Chris.
- Call init_swap_ops() before setup_swap_extents() invocation. This
doesn't harm anything and can benefit later adding sis->ops->swap_activate
method.

-v2:
- Lots of cleanup for patch 2/3: renaming, moving data
structures, and using const properly
- Collected tags from Kairui, Nhat and Barry

-v1:
- https://lore.kernel.org/linux-mm/20260302104016.163542-1-bhe@xxxxxxxxxx/

Baoquan He (3):
mm/swap: use swap_ops to register swap device's methods
mm/page_io.c: rename page_io functions to consistent naming
mm/swap: add unplug callback to swap_ops to fix leaky abstraction

include/linux/swap.h | 3 ++
mm/page_io.c | 115 ++++++++++++++++++++++++++-----------------
mm/swap.h | 11 ++++-
mm/swapfile.c | 9 ++++
mm/zswap.c | 2 +-
5 files changed, 94 insertions(+), 46 deletions(-)

--
2.52.0