void region_free(struct region *region) { struct slab *slab, *tmp; rlist_foreach_entry_safe(slab, ®ion->slabs.slabs, next_in_list, tmp) slab_put(region->cache, slab); slab_list_create(®ion->slabs); }
void mempool_create_with_order(struct mempool *pool, struct slab_cache *cache, uint32_t objsize, uint8_t order) { assert(order <= cache->order_max); lifo_init(&pool->link); lifo_init(&pool->delayed); pool->cache = cache; slab_list_create(&pool->slabs); mslab_tree_new(&pool->free_slabs); pool->spare = NULL; pool->objsize = objsize; pool->slab_order = order; /* Total size of slab */ uint32_t slab_size = slab_order_size(pool->cache, pool->slab_order); /* Calculate how many objects will actually fit in a slab. */ pool->objcount = (slab_size - mslab_sizeof()) / objsize; assert(pool->objcount); pool->objoffset = slab_size - pool->objcount * pool->objsize; }