mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	 d19af0e936
			
		
	
	
		d19af0e936
		
	
	
	
	
		
			
			Avoid inlining all and everything from alloc_cache.h and move cold bits into a new file. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Reviewed-by: Gabriel Krisman Bertazi <krisman@suse.de> Link: https://lore.kernel.org/r/06984c6cd58e703f7cfae5ab3067912f9f635a06.1738087204.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
		
			
				
	
	
		
			44 lines
		
	
	
	
		
			945 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			945 B
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0
 | |
| 
 | |
| #include "alloc_cache.h"
 | |
| 
 | |
| void io_alloc_cache_free(struct io_alloc_cache *cache,
 | |
| 			 void (*free)(const void *))
 | |
| {
 | |
| 	void *entry;
 | |
| 
 | |
| 	if (!cache->entries)
 | |
| 		return;
 | |
| 
 | |
| 	while ((entry = io_alloc_cache_get(cache)) != NULL)
 | |
| 		free(entry);
 | |
| 
 | |
| 	kvfree(cache->entries);
 | |
| 	cache->entries = NULL;
 | |
| }
 | |
| 
 | |
| /* returns false if the cache was initialized properly */
 | |
| bool io_alloc_cache_init(struct io_alloc_cache *cache,
 | |
| 			 unsigned max_nr, unsigned int size,
 | |
| 			 unsigned int init_bytes)
 | |
| {
 | |
| 	cache->entries = kvmalloc_array(max_nr, sizeof(void *), GFP_KERNEL);
 | |
| 	if (!cache->entries)
 | |
| 		return true;
 | |
| 
 | |
| 	cache->nr_cached = 0;
 | |
| 	cache->max_cached = max_nr;
 | |
| 	cache->elem_size = size;
 | |
| 	cache->init_clear = init_bytes;
 | |
| 	return false;
 | |
| }
 | |
| 
 | |
| void *io_cache_alloc_new(struct io_alloc_cache *cache, gfp_t gfp)
 | |
| {
 | |
| 	void *obj;
 | |
| 
 | |
| 	obj = kmalloc(cache->elem_size, gfp);
 | |
| 	if (obj && cache->init_clear)
 | |
| 		memset(obj, 0, cache->init_clear);
 | |
| 	return obj;
 | |
| }
 |