1*9b797a37SJens Axboe #ifndef IOU_ALLOC_CACHE_H 2*9b797a37SJens Axboe #define IOU_ALLOC_CACHE_H 3*9b797a37SJens Axboe 4*9b797a37SJens Axboe struct io_cache_entry { 5*9b797a37SJens Axboe struct hlist_node node; 6*9b797a37SJens Axboe }; 7*9b797a37SJens Axboe 8*9b797a37SJens Axboe static inline void io_alloc_cache_put(struct io_alloc_cache *cache, 9*9b797a37SJens Axboe struct io_cache_entry *entry) 10*9b797a37SJens Axboe { 11*9b797a37SJens Axboe hlist_add_head(&entry->node, &cache->list); 12*9b797a37SJens Axboe } 13*9b797a37SJens Axboe 14*9b797a37SJens Axboe static inline struct io_cache_entry *io_alloc_cache_get(struct io_alloc_cache *cache) 15*9b797a37SJens Axboe { 16*9b797a37SJens Axboe if (!hlist_empty(&cache->list)) { 17*9b797a37SJens Axboe struct hlist_node *node = cache->list.first; 18*9b797a37SJens Axboe 19*9b797a37SJens Axboe hlist_del(node); 20*9b797a37SJens Axboe return container_of(node, struct io_cache_entry, node); 21*9b797a37SJens Axboe } 22*9b797a37SJens Axboe 23*9b797a37SJens Axboe return NULL; 24*9b797a37SJens Axboe } 25*9b797a37SJens Axboe 26*9b797a37SJens Axboe static inline void io_alloc_cache_init(struct io_alloc_cache *cache) 27*9b797a37SJens Axboe { 28*9b797a37SJens Axboe INIT_HLIST_HEAD(&cache->list); 29*9b797a37SJens Axboe } 30*9b797a37SJens Axboe 31*9b797a37SJens Axboe static inline void io_alloc_cache_free(struct io_alloc_cache *cache, 32*9b797a37SJens Axboe void (*free)(struct io_cache_entry *)) 33*9b797a37SJens Axboe { 34*9b797a37SJens Axboe while (!hlist_empty(&cache->list)) { 35*9b797a37SJens Axboe struct hlist_node *node = cache->list.first; 36*9b797a37SJens Axboe 37*9b797a37SJens Axboe hlist_del(node); 38*9b797a37SJens Axboe free(container_of(node, struct io_cache_entry, node)); 39*9b797a37SJens Axboe } 40*9b797a37SJens Axboe } 41*9b797a37SJens Axboe #endif 42