File Index
Files and directories
Sign in
FILE

alloc_cache.c

File preview with syntax highlighting.

linux-6.19.14/io_uring/alloc_cache.c C
 1// SPDX-License-Identifier: GPL-2.0
 2
 3#include "alloc_cache.h"
 4
 5void 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 */
21bool 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
36void *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}
~/ Read-only file preview.