Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/io_uring/alloc_cache.c
26131 views
1
// SPDX-License-Identifier: GPL-2.0
2
3
#include "alloc_cache.h"
4
5
void io_alloc_cache_free(struct io_alloc_cache *cache,
6
void (*free)(const void *))
7
{
8
void *entry;
9
10
if (!cache->entries)
11
return;
12
13
while ((entry = io_alloc_cache_get(cache)) != NULL)
14
free(entry);
15
16
kvfree(cache->entries);
17
cache->entries = NULL;
18
}
19
20
/* returns false if the cache was initialized properly */
21
bool io_alloc_cache_init(struct io_alloc_cache *cache,
22
unsigned max_nr, unsigned int size,
23
unsigned int init_bytes)
24
{
25
cache->entries = kvmalloc_array(max_nr, sizeof(void *), GFP_KERNEL);
26
if (!cache->entries)
27
return true;
28
29
cache->nr_cached = 0;
30
cache->max_cached = max_nr;
31
cache->elem_size = size;
32
cache->init_clear = init_bytes;
33
return false;
34
}
35
36
void *io_cache_alloc_new(struct io_alloc_cache *cache, gfp_t gfp)
37
{
38
void *obj;
39
40
obj = kmalloc(cache->elem_size, gfp);
41
if (obj && cache->init_clear)
42
memset(obj, 0, cache->init_clear);
43
return obj;
44
}
45
46