mm/zswap: invalidate duplicate entry when !zswap_enabled
authorChengming Zhou <zhouchengming@bytedance.com>
Thu, 8 Feb 2024 02:32:54 +0000 (02:32 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 1 Mar 2024 12:35:10 +0000 (13:35 +0100)
commit 678e54d4bb9a4822f8ae99690ac131c5d490cdb1 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
mm/zswap.c

index 37d2b1cb2ecb4675ace6f1e7558af1e1c0640c68..63fb94d68e1071ef471a6fcb72ba8e4da69f10c6 100644 (file)
@@ -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