25 #ifndef __MOTR_BE_POOL_H__ 26 #define __MOTR_BE_POOL_H__ 122 #define M0_BE_POOL_DESCR(hname, amb_type, pool_field, pool_magic_field, \ 125 .bpld_name = hname, \ 126 .bpld_item_offset = offsetof(amb_type, pool_field), \ 127 .bpld_magic_offset = offsetof(amb_type, pool_magic_field), \ 128 .bpld_magic = pool_magic, \ 130 M0_BASSERT(M0_HAS_TYPE(M0_FIELD_VALUE(amb_type, pool_field), \ 131 struct m0_be_pool_item)); \ 132 M0_BASSERT(M0_HAS_TYPE(M0_FIELD_VALUE(amb_type, pool_magic_field), \ 135 #define M0_BE_POOL_DESCR_DEFINE(name, hname, scope, amb_type, pool_field, \ 136 pool_magic_field, pool_magic) \ 137 scope const struct m0_be_pool_descr name ## _pool_d = \ 138 M0_BE_POOL_DESCR(hname, amb_type, pool_field, pool_magic_field, \ 141 #define M0_BE_POOL_DEFINE(name, scope, amb_type) \ 143 scope int name ## _be_pool_init(struct m0_be_pool *pool, \ 144 struct m0_be_pool_cfg *cfg) \ 146 return m0_be_pool_init(pool, cfg); \ 149 scope void name ## _be_pool_fini(struct m0_be_pool *pool) \ 151 m0_be_pool_fini(pool); \ 154 scope void name ## _be_pool_add(struct m0_be_pool *pool, \ 157 m0_be_pool_add(&name ## _pool_d, pool, obj); \ 160 scope amb_type * name ## _be_pool_del(struct m0_be_pool *pool) \ 162 return (amb_type *)m0_be_pool_del(&name ## _pool_d, pool); \ 165 scope void name ## _be_pool_get(struct m0_be_pool *pool, \ 167 struct m0_be_op *op) \ 169 m0_be_pool_get(&name ## _pool_d, pool, (void **)obj, op); \ 172 scope void name ## _be_pool_put(struct m0_be_pool *pool, \ 175 m0_be_pool_put(&name ## _pool_d, pool, obj); \ 178 struct __ ## name ## _terminate_me_with_a_semicolon { ; }
M0_INTERNAL int m0_be_pool_init(struct m0_be_pool *pool, struct m0_be_pool_cfg *cfg)
M0_INTERNAL void m0_be_pool_get(const struct m0_be_pool_descr *d, struct m0_be_pool *pool, void **obj, struct m0_be_op *op)
struct m0_tl bpl_q_pending
M0_INTERNAL void m0_be_pool_add(const struct m0_be_pool_descr *d, struct m0_be_pool *pool, void *obj)
static struct m0_pool pool
struct m0_tlink bpli_link
M0_INTERNAL void * m0_be_pool_del(const struct m0_be_pool_descr *d, struct m0_be_pool *pool)
M0_INTERNAL void m0_be_pool_fini(struct m0_be_pool *pool)
M0_INTERNAL void m0_be_pool_put(const struct m0_be_pool_descr *d, struct m0_be_pool *pool, void *obj)
struct be_pool_queue_item * bpl_q_items
struct m0_be_pool_cfg bpl_cfg