These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / block / zram / zcomp_lz4.c
index f2afb7e..dd60831 100644 (file)
 #include <linux/kernel.h>
 #include <linux/slab.h>
 #include <linux/lz4.h>
+#include <linux/vmalloc.h>
+#include <linux/mm.h>
 
 #include "zcomp_lz4.h"
 
 static void *zcomp_lz4_create(void)
 {
-       return kzalloc(LZ4_MEM_COMPRESS, GFP_KERNEL);
+       void *ret;
+
+       /*
+        * This function can be called in swapout/fs write path
+        * so we can't use GFP_FS|IO. And it assumes we already
+        * have at least one stream in zram initialization so we
+        * don't do best effort to allocate more stream in here.
+        * A default stream will work well without further multiple
+        * streams. That's why we use NORETRY | NOWARN.
+        */
+       ret = kzalloc(LZ4_MEM_COMPRESS, GFP_NOIO | __GFP_NORETRY |
+                                       __GFP_NOWARN);
+       if (!ret)
+               ret = __vmalloc(LZ4_MEM_COMPRESS,
+                               GFP_NOIO | __GFP_NORETRY | __GFP_NOWARN |
+                               __GFP_ZERO | __GFP_HIGHMEM,
+                               PAGE_KERNEL);
+       return ret;
 }
 
 static void zcomp_lz4_destroy(void *private)
 {
-       kfree(private);
+       kvfree(private);
 }
 
 static int zcomp_lz4_compress(const unsigned char *src, unsigned char *dst,