lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Fri, 08 Nov 2013 17:50:03 +0800
From:	"changkun.li" <xfishcoder@...il.com>
To:	sjenning@...ux.vnet.ibm.com, linux-mm@...ck.org
Cc:	luyi@....cn, lichangkun@....cn, linux-kernel@...r.kernel.org
Subject: [Patch 3.11.7 1/1]mm: remove and free expired data in time in zswap

In zswap, store page A to zbud if the compression ratio is high, insert
its entry into rbtree. if there is a entry B which has the same offset
in the rbtree.Remove and free B before insert the entry of A.

case:
if the compression ratio of page A is not high, return without checking
the same offset one in rbtree.

if there is a entry B which has the same offset in the rbtree. Now, we
make sure B is invalid or expired. But the entry and compressed memory
of B are not freed in time.

Because zswap spaces data in memory, it makes the utilization of memory
lower. the other valid data in zbud is writeback to swap device more
possibility, when zswap is full.

So if we make sure a entry is expired, free it in time.

Signed-off-by: changkun.li<xfishcoder@...il.com>
---
 mm/zswap.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/mm/zswap.c b/mm/zswap.c
index cbd9578..90a2813 100644
--- a/mm/zswap.c
+++ b/mm/zswap.c
@@ -596,6 +596,7 @@ fail:
 	return ret;
 }
 
+static void zswap_frontswap_invalidate_page(unsigned type, pgoff_t
offset);
 /*********************************
 * frontswap hooks
 **********************************/
@@ -614,7 +615,7 @@ static int zswap_frontswap_store(unsigned type,
pgoff_t offset,
 
 	if (!tree) {
 		ret = -ENODEV;
-		goto reject;
+		goto nodev;
 	}
 
 	/* reclaim space if needed */
@@ -695,6 +696,8 @@ freepage:
 	put_cpu_var(zswap_dstmem);
 	zswap_entry_cache_free(entry);
 reject:
+	zswap_frontswap_invalidate_page(type, offset);
+nodev:
 	return ret;
 }
 
-- 
1.7.1


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ