Linux 6.10-rc3
[linux-2.6-block.git] / include / linux / slab.h
index 4cc37ef22aaed11e0e6d917a7aaf09db5939ad47..7247e217e21bd0faf6d8e4ab8770b48a14134c45 100644 (file)
@@ -279,7 +279,7 @@ void kfree(const void *objp);
 void kfree_sensitive(const void *objp);
 size_t __ksize(const void *objp);
 
-DEFINE_FREE(kfree, void *, if (_T) kfree(_T))
+DEFINE_FREE(kfree, void *, if (!IS_ERR_OR_NULL(_T)) kfree(_T))
 
 /**
  * ksize - Report actual allocation size of associated object
@@ -785,30 +785,35 @@ extern void *kvmalloc_node_noprof(size_t size, gfp_t flags, int node) __alloc_si
 
 #define kvmalloc(_size, _flags)                        kvmalloc_node(_size, _flags, NUMA_NO_NODE)
 #define kvmalloc_noprof(_size, _flags)         kvmalloc_node_noprof(_size, _flags, NUMA_NO_NODE)
-#define kvzalloc(_size, _flags)                        kvmalloc(_size, _flags|__GFP_ZERO)
+#define kvzalloc(_size, _flags)                        kvmalloc(_size, (_flags)|__GFP_ZERO)
 
-#define kvzalloc_node(_size, _flags, _node)    kvmalloc_node(_size, _flags|__GFP_ZERO, _node)
+#define kvzalloc_node(_size, _flags, _node)    kvmalloc_node(_size, (_flags)|__GFP_ZERO, _node)
 
-static inline __alloc_size(1, 2) void *kvmalloc_array_noprof(size_t n, size_t size, gfp_t flags)
+static inline __alloc_size(1, 2) void *
+kvmalloc_array_node_noprof(size_t n, size_t size, gfp_t flags, int node)
 {
        size_t bytes;
 
        if (unlikely(check_mul_overflow(n, size, &bytes)))
                return NULL;
 
-       return kvmalloc_node_noprof(bytes, flags, NUMA_NO_NODE);
+       return kvmalloc_node_noprof(bytes, flags, node);
 }
 
+#define kvmalloc_array_noprof(...)             kvmalloc_array_node_noprof(__VA_ARGS__, NUMA_NO_NODE)
+#define kvcalloc_node_noprof(_n,_s,_f,_node)   kvmalloc_array_node_noprof(_n,_s,(_f)|__GFP_ZERO,_node)
+#define kvcalloc_noprof(...)                   kvcalloc_node_noprof(__VA_ARGS__, NUMA_NO_NODE)
+
 #define kvmalloc_array(...)                    alloc_hooks(kvmalloc_array_noprof(__VA_ARGS__))
-#define kvcalloc(_n, _size, _flags)            kvmalloc_array(_n, _size, _flags|__GFP_ZERO)
-#define kvcalloc_noprof(_n, _size, _flags)     kvmalloc_array_noprof(_n, _size, _flags|__GFP_ZERO)
+#define kvcalloc_node(...)                     alloc_hooks(kvcalloc_node_noprof(__VA_ARGS__))
+#define kvcalloc(...)                          alloc_hooks(kvcalloc_noprof(__VA_ARGS__))
 
 extern void *kvrealloc_noprof(const void *p, size_t oldsize, size_t newsize, gfp_t flags)
                      __realloc_size(3);
 #define kvrealloc(...)                         alloc_hooks(kvrealloc_noprof(__VA_ARGS__))
 
 extern void kvfree(const void *addr);
-DEFINE_FREE(kvfree, void *, if (_T) kvfree(_T))
+DEFINE_FREE(kvfree, void *, if (!IS_ERR_OR_NULL(_T)) kvfree(_T))
 
 extern void kvfree_sensitive(const void *addr, size_t len);