/* * bucket_get_rm_block_bestfit -- * removes and returns the best-fit memory block for size */ int bucket_get_rm_block_bestfit(struct bucket *b, struct memory_block *m) { uint64_t key = CHUNK_KEY_PACK(m->zone_id, m->chunk_id, m->block_off, m->size_idx); if ((key = ctree_remove(b->tree, key, 0)) == 0) return ENOMEM; m->chunk_id = CHUNK_KEY_GET_CHUNK_ID(key); m->zone_id = CHUNK_KEY_GET_ZONE_ID(key); m->block_off = CHUNK_KEY_GET_BLOCK_OFF(key); m->size_idx = CHUNK_KEY_GET_SIZE_IDX(key); return 0; }
/* * bucket_tree_get_rm_block_bestfit -- (internal) removes and returns the * best-fit memory block for size */ static int bucket_tree_get_rm_block_bestfit(struct block_container *bc, struct memory_block *m) { uint64_t key = CHUNK_KEY_PACK(m->zone_id, m->chunk_id, m->block_off, m->size_idx); struct block_container_ctree *c = (struct block_container_ctree *)bc; if ((key = ctree_remove(c->tree, key, 0)) == 0) return ENOMEM; m->chunk_id = CHUNK_KEY_GET_CHUNK_ID(key); m->zone_id = CHUNK_KEY_GET_ZONE_ID(key); m->block_off = CHUNK_KEY_GET_BLOCK_OFF(key); m->size_idx = CHUNK_KEY_GET_SIZE_IDX(key); return 0; }