mm/zswap: invalidate duplicate entry when !zswap_enabled

JIRA: https://issues.redhat.com/browse/RHEL-40684

This patch is a backport of the following upstream commit:
commit 678e54d4bb9a4822f8ae99690ac131c5d490cdb1
Author: Chengming Zhou <zhouchengming@bytedance.com>
Date:   Thu Feb 8 02:32:54 2024 +0000

    mm/zswap: invalidate duplicate entry when !zswap_enabled

    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: Rafael Aquini <aquini@redhat.com>
This commit is contained in:
Rafael Aquini 2024-06-28 12:23:42 -04:00
parent ac4f2475de
commit c1c85172b5
1 changed files with 5 additions and 1 deletions

View File

@ -1350,7 +1350,7 @@ bool zswap_store(struct folio *folio)
if (folio_test_large(folio))
return false;
if (!zswap_enabled || !tree)
if (!tree)
return false;
/*
@ -1365,6 +1365,10 @@ bool zswap_store(struct folio *folio)
zswap_invalidate_entry(tree, dupentry);
}
spin_unlock(&tree->lock);
if (!zswap_enabled)
return false;
objcg = get_obj_cgroup_from_folio(folio);
if (objcg && !obj_cgroup_may_zswap(objcg)) {
memcg = get_mem_cgroup_from_objcg(objcg);