From: Kefeng Wang <wangkefeng.wang@huawei.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: <linux-mm@kvack.org>, Chengming Zhou <chengming.zhou@linux.dev>,
Johannes Weiner <hannes@cmpxchg.org>,
Kairui Song <kasong@tencent.com>, Nhat Pham <nphamcs@gmail.com>,
Yosry Ahmed <yosryahmed@google.com>,
Kefeng Wang <wangkefeng.wang@huawei.com>
Subject: [PATCH v2 1/4] mm: zswap: pass type and offset to zswap_invalidate() directly
Date: Thu, 10 Sep 2026 17:54:46 +0800 [thread overview]
Message-ID: <20260910095449.715183-2-wangkefeng.wang@huawei.com> (raw)
In-Reply-To: <20260910095449.715183-1-wangkefeng.wang@huawei.com>
zswap_invalidate() takes a swp_entry_t only to unpack it right back
into type and offset. Both callers already have those values, so
pass them directly and drop the swp_entry()/swp_type()/swp_offset()
round-trip.
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
---
include/linux/zswap.h | 4 ++--
mm/swapfile.c | 2 +-
mm/zswap.c | 14 +++++++++-----
3 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/include/linux/zswap.h b/include/linux/zswap.h
index 30c193a1207e..463bdee5c1e1 100644
--- a/include/linux/zswap.h
+++ b/include/linux/zswap.h
@@ -27,7 +27,7 @@ struct zswap_lruvec_state {
unsigned long zswap_total_pages(void);
bool zswap_store(struct folio *folio);
int zswap_load(struct folio *folio);
-void zswap_invalidate(swp_entry_t swp);
+void zswap_invalidate(int type, pgoff_t offset);
int zswap_swapon(int type, unsigned long nr_pages);
void zswap_swapoff(int type);
void zswap_memcg_offline_cleanup(struct mem_cgroup *memcg);
@@ -49,7 +49,7 @@ static inline int zswap_load(struct folio *folio)
return -ENOENT;
}
-static inline void zswap_invalidate(swp_entry_t swp) {}
+static inline void zswap_invalidate(int type, pgoff_t offset) {}
static inline int zswap_swapon(int type, unsigned long nr_pages)
{
return 0;
diff --git a/mm/swapfile.c b/mm/swapfile.c
index 05d3408396f9..ba71905e4d46 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -1319,7 +1319,7 @@ static void swap_range_free(struct swap_info_struct *si, unsigned long offset,
unsigned int i;
for (i = 0; i < nr_entries; i++)
- zswap_invalidate(swp_entry(si->type, offset + i));
+ zswap_invalidate(si->type, offset + i);
if (si->flags & SWP_BLKDEV)
swap_slot_free_notify =
diff --git a/mm/zswap.c b/mm/zswap.c
index a12b6452a225..420c405d0402 100644
--- a/mm/zswap.c
+++ b/mm/zswap.c
@@ -228,10 +228,15 @@ static bool zswap_has_pool;
/* One swap address space for each 64M swap space */
#define ZSWAP_ADDRESS_SPACE_SHIFT 14
#define ZSWAP_ADDRESS_SPACE_PAGES (1 << ZSWAP_ADDRESS_SPACE_SHIFT)
+
+static inline struct xarray *zswap_tree(int type, pgoff_t offset)
+{
+ return &zswap_trees[type][offset >> ZSWAP_ADDRESS_SPACE_SHIFT];
+}
+
static inline struct xarray *swap_zswap_tree(swp_entry_t swp)
{
- return &zswap_trees[swp_type(swp)][swp_offset(swp)
- >> ZSWAP_ADDRESS_SPACE_SHIFT];
+ return zswap_tree(swp_type(swp), swp_offset(swp));
}
#define zswap_pool_debug(msg, p) \
@@ -1659,10 +1664,9 @@ int zswap_load(struct folio *folio)
return 0;
}
-void zswap_invalidate(swp_entry_t swp)
+void zswap_invalidate(int type, pgoff_t offset)
{
- pgoff_t offset = swp_offset(swp);
- struct xarray *tree = swap_zswap_tree(swp);
+ struct xarray *tree = zswap_tree(type, offset);
struct zswap_entry *entry;
if (xa_empty(tree))
--
2.55.0
next prev parent reply other threads:[~2026-09-10 9:55 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-10 9:54 [PATCH v2 0/4] mm: zswap: misc optimizations Kefeng Wang
2026-09-10 9:54 ` Kefeng Wang [this message]
2026-09-10 10:26 ` [PATCH v2 1/4] mm: zswap: pass type and offset to zswap_invalidate() directly Yosry Ahmed
2026-09-10 17:57 ` Nhat Pham
2026-09-10 19:27 ` Johannes Weiner
2026-09-10 9:54 ` [PATCH v2 2/4] mm: zswap: reuse zswap_invalidate() in zswap_store() check_old path Kefeng Wang
2026-09-10 10:27 ` Yosry Ahmed
2026-09-10 19:27 ` Johannes Weiner
2026-09-10 9:54 ` [PATCH v2 3/4] mm: zswap: avoid unnecessary xarray lookup in zswap_store() Kefeng Wang
2026-09-10 10:28 ` Yosry Ahmed
2026-09-10 9:54 ` [PATCH v2 4/4] mm: zswap: skip zswap_invalidate() in swap_range_free() when zswap is unused Kefeng Wang
2026-09-10 10:29 ` Yosry Ahmed
2026-09-10 11:10 ` Kefeng Wang
2026-09-10 11:12 ` 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=20260910095449.715183-2-wangkefeng.wang@huawei.com \
--to=wangkefeng.wang@huawei.com \
--cc=akpm@linux-foundation.org \
--cc=chengming.zhou@linux.dev \
--cc=hannes@cmpxchg.org \
--cc=kasong@tencent.com \
--cc=linux-mm@kvack.org \
--cc=nphamcs@gmail.com \
--cc=yosryahmed@google.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 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.