diff mbox

btrfs: use kmalloc for lzo de/compress buffer

Message ID 1360933701-17434-1-git-send-email-kyungsik.lee@lge.com (mailing list archive)
State New, archived
Headers show

Commit Message

Kyungsik Lee Feb. 15, 2013, 1:08 p.m. UTC
The size of de/compress buffer and LZO1X_MEM_COMPRESS is small enough.
Allocating it with kmalloc rather than vmalloc is preferred.

This patch depends on my previous patch, “btrfs: fix decompress buffer size”.

Signed-off-by: Kyungsik Lee <kyungsik.lee@lge.com>
Cc: David Sterba <dsterba@suse.cz>
---
 fs/btrfs/lzo.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

Comments

David Sterba Feb. 15, 2013, 1:17 p.m. UTC | #1
On Fri, Feb 15, 2013 at 10:08:21PM +0900, Kyungsik Lee wrote:
> The size of de/compress buffer and LZO1X_MEM_COMPRESS is small enough.

Unfortunatelly it is not.

include/linux/lzo.h:

#define LZO1X_MEM_COMPRESS      (16384 * sizeof(unsigned char *))

128k with 8 byte pointers

> @@ -54,9 +53,10 @@ static struct list_head *lzo_alloc_workspace(void)
>  	if (!workspace)
>  		return ERR_PTR(-ENOMEM);
>  
> -	workspace->mem = vmalloc(LZO1X_MEM_COMPRESS);

vmalloc needed

> -	workspace->buf = vmalloc(PAGE_CACHE_SIZE);

kmalloc is ok here

> -	workspace->cbuf = vmalloc(lzo1x_worst_compress(PAGE_CACHE_SIZE));

#define lzo1x_worst_compress(x) ((x) + ((x) / 16) + 64 + 3)

4096+4096/16+64+3 = 4419

vmalloc needed as well

david
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/btrfs/lzo.c b/fs/btrfs/lzo.c
index 223893a..f223742 100644
--- a/fs/btrfs/lzo.c
+++ b/fs/btrfs/lzo.c
@@ -18,7 +18,6 @@ 
 
 #include <linux/kernel.h>
 #include <linux/slab.h>
-#include <linux/vmalloc.h>
 #include <linux/init.h>
 #include <linux/err.h>
 #include <linux/sched.h>
@@ -40,9 +39,9 @@  static void lzo_free_workspace(struct list_head *ws)
 {
 	struct workspace *workspace = list_entry(ws, struct workspace, list);
 
-	vfree(workspace->buf);
-	vfree(workspace->cbuf);
-	vfree(workspace->mem);
+	kfree(workspace->buf);
+	kfree(workspace->cbuf);
+	kfree(workspace->mem);
 	kfree(workspace);
 }
 
@@ -54,9 +53,10 @@  static struct list_head *lzo_alloc_workspace(void)
 	if (!workspace)
 		return ERR_PTR(-ENOMEM);
 
-	workspace->mem = vmalloc(LZO1X_MEM_COMPRESS);
-	workspace->buf = vmalloc(PAGE_CACHE_SIZE);
-	workspace->cbuf = vmalloc(lzo1x_worst_compress(PAGE_CACHE_SIZE));
+	workspace->mem = kmalloc(LZO1X_MEM_COMPRESS, GFP_NOFS);
+	workspace->buf = kmalloc(PAGE_CACHE_SIZE, GFP_NOFS);
+	workspace->cbuf = kmalloc(lzo1x_worst_compress(PAGE_CACHE_SIZE),
+			GFP_NOFS);
 	if (!workspace->mem || !workspace->buf || !workspace->cbuf)
 		goto fail;