[PATCH 3/6] mm/page_io: use swap entries directly in zeromap helpers
From: Tal Zussman
Date: Thu Aug 06 2026 - 18:58:53 EST
Increment swp_entry_t::val directly instead of recomputing each entry
with page_swap_entry(). This removes the last struct page usage in
page_io.c and saves one call to compound_head() per page.
Signed-off-by: Tal Zussman <tz2294@xxxxxxxxxxxx>
---
mm/page_io.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/mm/page_io.c b/mm/page_io.c
index 43b4383a4729..c6d0949b3f1e 100644
--- a/mm/page_io.c
+++ b/mm/page_io.c
@@ -159,7 +159,7 @@ static void swap_zeromap_folio_set(struct folio *folio)
struct obj_cgroup *objcg = get_obj_cgroup_from_folio(folio);
int nr_pages = folio_nr_pages(folio);
struct swap_cluster_info *ci;
- swp_entry_t entry;
+ swp_entry_t entry = folio->swap;
unsigned int i;
VM_WARN_ON_ONCE_FOLIO(!folio_test_swapcache(folio), folio);
@@ -167,8 +167,8 @@ static void swap_zeromap_folio_set(struct folio *folio)
ci = swap_cluster_get_and_lock(folio);
for (i = 0; i < folio_nr_pages(folio); i++) {
- entry = page_swap_entry(folio_page(folio, i));
__swap_table_set_zero(ci, swp_cluster_offset(entry));
+ entry.val++;
}
swap_cluster_unlock(ci);
@@ -182,7 +182,7 @@ static void swap_zeromap_folio_set(struct folio *folio)
static void swap_zeromap_folio_clear(struct folio *folio)
{
struct swap_cluster_info *ci;
- swp_entry_t entry;
+ swp_entry_t entry = folio->swap;
unsigned int i;
VM_WARN_ON_ONCE_FOLIO(!folio_test_swapcache(folio), folio);
@@ -190,8 +190,8 @@ static void swap_zeromap_folio_clear(struct folio *folio)
ci = swap_cluster_get_and_lock(folio);
for (i = 0; i < folio_nr_pages(folio); i++) {
- entry = page_swap_entry(folio_page(folio, i));
__swap_table_clear_zero(ci, swp_cluster_offset(entry));
+ entry.val++;
}
swap_cluster_unlock(ci);
}
--
2.39.5