From: Chengming Zhou zhouchengming@bytedance.com
We have to invalidate any duplicate entry even when !zswap_enabled since zswap can be disabled anytime. If the folio store success before, then got dirtied again but zswap disabled, we won't invalidate the old duplicate entry in the zswap_store(). So later lru writeback may overwrite the new data in swapfile.
Link: https://lkml.kernel.org/r/20240208023254.3873823-1-chengming.zhou@linux.dev Fixes: 42c06a0e8ebe ("mm: kill frontswap") Signed-off-by: Chengming Zhou zhouchengming@bytedance.com Acked-by: Johannes Weiner hannes@cmpxchg.org Cc: Nhat Pham nphamcs@gmail.com Cc: Yosry Ahmed yosryahmed@google.com Cc: stable@vger.kernel.org Signed-off-by: Andrew Morton akpm@linux-foundation.org (cherry picked from commit 678e54d4bb9a4822f8ae99690ac131c5d490cdb1) --- mm/zswap.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/mm/zswap.c b/mm/zswap.c index 37d2b1cb2ecb..63fb94d68e10 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -1215,7 +1215,7 @@ bool zswap_store(struct folio *folio) if (folio_test_large(folio)) return false;
- if (!zswap_enabled || !tree) + if (!tree) return false;
/* @@ -1231,6 +1231,9 @@ bool zswap_store(struct folio *folio) } spin_unlock(&tree->lock);
+ if (!zswap_enabled) + return false; + /* * XXX: zswap reclaim does not work with cgroups yet. Without a * cgroup-aware entry LRU, we will push out entries system-wide based on