summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--module/os/linux/spl/spl-kmem.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/module/os/linux/spl/spl-kmem.c b/module/os/linux/spl/spl-kmem.c
index d2799b5bd..defbe80a2 100644
--- a/module/os/linux/spl/spl-kmem.c
+++ b/module/os/linux/spl/spl-kmem.c
@@ -137,6 +137,10 @@ EXPORT_SYMBOL(kmem_strfree);
#ifndef __GFP_RETRY_MAYFAIL
#define __GFP_RETRY_MAYFAIL __GFP_REPEAT
#endif
+/* Kernel compatibility for <4.4 */
+#ifndef __GFP_RECLAIM
+#define __GFP_RECLAIM __GFP_WAIT
+#endif
void *
spl_kvmalloc(size_t size, gfp_t lflags)
@@ -186,14 +190,15 @@ spl_kvmalloc(size_t size, gfp_t lflags)
* We first try kmalloc - even for big sizes - and fall back to
* __vmalloc if that fails.
*
- * For non-GFP_KERNEL allocations we always stick to kmalloc_node,
- * and fail when kmalloc is not successful (returns NULL).
+ * For non-__GFP-RECLAIM allocations we always stick to
+ * kmalloc_node, and fail when kmalloc is not successful (returns
+ * NULL).
* We cannot fall back to __vmalloc in this case because __vmalloc
* internally uses GPF_KERNEL allocations.
*/
void *ptr = kmalloc_node(size, kmalloc_lflags, NUMA_NO_NODE);
if (ptr || size <= PAGE_SIZE ||
- (lflags & GFP_KERNEL) != GFP_KERNEL) {
+ (lflags & __GFP_RECLAIM) != __GFP_RECLAIM) {
return (ptr);
}