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]
Message-Id: <20240206202511.4799-1-21cnbao@gmail.com>
Date: Wed,  7 Feb 2024 09:25:11 +1300
From: Barry Song <21cnbao@...il.com>
To: axboe@...nel.dk,
	linux-block@...r.kernel.org,
	minchan@...nel.org,
	senozhatsky@...omium.org
Cc: akpm@...ux-foundation.org,
	linux-kernel@...r.kernel.org,
	zhengtangquan@...o.com,
	Barry Song <v-songbaohua@...o.com>
Subject: [PATCH v2] zram: easy the allocation of zcomp_strm's buffers through vmalloc

From: Barry Song <v-songbaohua@...o.com>

Firstly, there is no need to keep zcomp_strm's buffers contiguous
physically.

Secondly, The recent mTHP project has provided the possibility to
swapout and swapin large folios. Compressing/decompressing large
blocks can hugely decrease CPU consumption and improve compression
ratio. This requires us to make zRAM support the compression and
decompression for large objects.
With the support of large objects in zRAM of our out-of-tree code,
we have observed many allocation failures during CPU hotplug as
large objects need larger buffers. So this change is also more
future-proof once we begin to bring up multiple sizes in zRAM.

Signed-off-by: Barry Song <v-songbaohua@...o.com>
---
 drivers/block/zram/zcomp.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c
index 55af4efd7983..8237b08c49d8 100644
--- a/drivers/block/zram/zcomp.c
+++ b/drivers/block/zram/zcomp.c
@@ -11,6 +11,7 @@
 #include <linux/sched.h>
 #include <linux/cpu.h>
 #include <linux/crypto.h>
+#include <linux/vmalloc.h>
 
 #include "zcomp.h"
 
@@ -37,7 +38,7 @@ static void zcomp_strm_free(struct zcomp_strm *zstrm)
 {
 	if (!IS_ERR_OR_NULL(zstrm->tfm))
 		crypto_free_comp(zstrm->tfm);
-	free_pages((unsigned long)zstrm->buffer, 1);
+	vfree(zstrm->buffer);
 	zstrm->tfm = NULL;
 	zstrm->buffer = NULL;
 }
@@ -53,7 +54,7 @@ static int zcomp_strm_init(struct zcomp_strm *zstrm, struct zcomp *comp)
 	 * allocate 2 pages. 1 for compressed data, plus 1 extra for the
 	 * case when compressed size is larger than the original one
 	 */
-	zstrm->buffer = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, 1);
+	zstrm->buffer = vzalloc(2 * PAGE_SIZE);
 	if (IS_ERR_OR_NULL(zstrm->tfm) || !zstrm->buffer) {
 		zcomp_strm_free(zstrm);
 		return -ENOMEM;
-- 
2.34.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ