aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/zram/zcomp_lz4.c23
-rw-r--r--drivers/block/zram/zcomp_lzo.c23
2 files changed, 42 insertions, 4 deletions
diff --git a/drivers/block/zram/zcomp_lz4.c b/drivers/block/zram/zcomp_lz4.c
index ee44b51130a4..dd6083124276 100644
--- a/drivers/block/zram/zcomp_lz4.c
+++ b/drivers/block/zram/zcomp_lz4.c
@@ -10,17 +10,36 @@
10#include <linux/kernel.h> 10#include <linux/kernel.h>
11#include <linux/slab.h> 11#include <linux/slab.h>
12#include <linux/lz4.h> 12#include <linux/lz4.h>
13#include <linux/vmalloc.h>
14#include <linux/mm.h>
13 15
14#include "zcomp_lz4.h" 16#include "zcomp_lz4.h"
15 17
16static void *zcomp_lz4_create(void) 18static void *zcomp_lz4_create(void)
17{ 19{
18 return kzalloc(LZ4_MEM_COMPRESS, GFP_NOIO); 20 void *ret;
21
22 /*
23 * This function can be called in swapout/fs write path
24 * so we can't use GFP_FS|IO. And it assumes we already
25 * have at least one stream in zram initialization so we
26 * don't do best effort to allocate more stream in here.
27 * A default stream will work well without further multiple
28 * streams. That's why we use NORETRY | NOWARN.
29 */
30 ret = kzalloc(LZ4_MEM_COMPRESS, GFP_NOIO | __GFP_NORETRY |
31 __GFP_NOWARN);
32 if (!ret)
33 ret = __vmalloc(LZ4_MEM_COMPRESS,
34 GFP_NOIO | __GFP_NORETRY | __GFP_NOWARN |
35 __GFP_ZERO | __GFP_HIGHMEM,
36 PAGE_KERNEL);
37 return ret;
19} 38}
20 39
21static void zcomp_lz4_destroy(void *private) 40static void zcomp_lz4_destroy(void *private)
22{ 41{
23 kfree(private); 42 kvfree(private);
24} 43}
25 44
26static int zcomp_lz4_compress(const unsigned char *src, unsigned char *dst, 45static int zcomp_lz4_compress(const unsigned char *src, unsigned char *dst,
diff --git a/drivers/block/zram/zcomp_lzo.c b/drivers/block/zram/zcomp_lzo.c
index 683ce049e070..edc549920fa0 100644
--- a/drivers/block/zram/zcomp_lzo.c
+++ b/drivers/block/zram/zcomp_lzo.c
@@ -10,17 +10,36 @@
10#include <linux/kernel.h> 10#include <linux/kernel.h>
11#include <linux/slab.h> 11#include <linux/slab.h>
12#include <linux/lzo.h> 12#include <linux/lzo.h>
13#include <linux/vmalloc.h>
14#include <linux/mm.h>
13 15
14#include "zcomp_lzo.h" 16#include "zcomp_lzo.h"
15 17
16static void *lzo_create(void) 18static void *lzo_create(void)
17{ 19{
18 return kzalloc(LZO1X_MEM_COMPRESS, GFP_NOIO); 20 void *ret;
21
22 /*
23 * This function can be called in swapout/fs write path
24 * so we can't use GFP_FS|IO. And it assumes we already
25 * have at least one stream in zram initialization so we
26 * don't do best effort to allocate more stream in here.
27 * A default stream will work well without further multiple
28 * streams. That's why we use NORETRY | NOWARN.
29 */
30 ret = kzalloc(LZO1X_MEM_COMPRESS, GFP_NOIO | __GFP_NORETRY |
31 __GFP_NOWARN);
32 if (!ret)
33 ret = __vmalloc(LZO1X_MEM_COMPRESS,
34 GFP_NOIO | __GFP_NORETRY | __GFP_NOWARN |
35 __GFP_ZERO | __GFP_HIGHMEM,
36 PAGE_KERNEL);
37 return ret;
19} 38}
20 39
21static void lzo_destroy(void *private) 40static void lzo_destroy(void *private)
22{ 41{
23 kfree(private); 42 kvfree(private);
24} 43}
25 44
26static int lzo_compress(const unsigned char *src, unsigned char *dst, 45static int lzo_compress(const unsigned char *src, unsigned char *dst,