]> git.sesse.net Git - bcachefs-tools-debian/blob - include/linux/mempool.h
Update bcachefs sources to b91a514413 bcachefs: Don't try to delete stripes when RO
[bcachefs-tools-debian] / include / linux / mempool.h
1 /*
2  * memory buffer pool support
3  */
4 #ifndef _LINUX_MEMPOOL_H
5 #define _LINUX_MEMPOOL_H
6
7 #include <linux/compiler.h>
8 #include <linux/bug.h>
9 #include <linux/slab.h>
10
11 struct kmem_cache;
12
13 typedef void * (mempool_alloc_t)(gfp_t gfp_mask, void *pool_data);
14 typedef void (mempool_free_t)(void *element, void *pool_data);
15
16 typedef struct mempool_s {
17         size_t                  elem_size;
18         void                    *pool_data;
19         mempool_alloc_t         *alloc;
20         mempool_free_t          *free;
21 } mempool_t;
22
23 static inline bool mempool_initialized(mempool_t *pool)
24 {
25         return true;
26 }
27
28 extern int mempool_resize(mempool_t *pool, int new_min_nr);
29
30 static inline void mempool_free(void *element, mempool_t *pool)
31 {
32         free(element);
33 }
34
35 static inline void *mempool_alloc(mempool_t *pool, gfp_t gfp_mask) __malloc
36 {
37         BUG_ON(!pool->elem_size);
38         return kmalloc(pool->elem_size, gfp_mask);
39 }
40
41 static inline void mempool_exit(mempool_t *pool) {}
42
43 static inline void mempool_destroy(mempool_t *pool)
44 {
45         free(pool);
46 }
47
48 static inline int
49 mempool_init_slab_pool(mempool_t *pool, int min_nr, struct kmem_cache *kc)
50 {
51         pool->elem_size = 0;
52         return 0;
53 }
54
55 static inline mempool_t *
56 mempool_create_slab_pool(int min_nr, struct kmem_cache *kc)
57 {
58         mempool_t *pool = malloc(sizeof(*pool));
59         pool->elem_size = 0;
60         return pool;
61 }
62
63 static inline int mempool_init_kmalloc_pool(mempool_t *pool, int min_nr, size_t size)
64 {
65         pool->elem_size = size;
66         return 0;
67 }
68
69 static inline int mempool_init_page_pool(mempool_t *pool, int min_nr, int order)
70 {
71         pool->elem_size = PAGE_SIZE << order;
72         return 0;
73 }
74
75 static inline int mempool_init(mempool_t *pool, int min_nr,
76                                mempool_alloc_t *alloc_fn,
77                                mempool_free_t *free_fn,
78                                void *pool_data)
79 {
80         pool->elem_size = (size_t) pool_data;
81         pool->pool_data = pool_data;
82         pool->alloc     = alloc_fn;
83         pool->free      = free_fn;
84         return 0;
85 }
86
87 #endif /* _LINUX_MEMPOOL_H */