23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_BE 67 be_pool_tlist_init(&
pool->bpl_free);
68 be_pool_tlist_init(&
pool->bpl_used);
69 be_pool_q_tlist_init(&
pool->bpl_q_free);
70 be_pool_q_tlist_init(&
pool->bpl_q_pending);
73 be_pool_q_tlink_init_at(&
pool->bpl_q_items[
i],
74 &
pool->bpl_q_free),
true);
80 M0_PRE(be_pool_q_tlist_length(&
pool->bpl_q_free) ==
81 pool->bpl_cfg.bplc_q_size);
84 be_pool_q_tlink_del_fini(&
pool->bpl_q_items[
i]),
true);
85 be_pool_q_tlist_fini(&
pool->bpl_q_pending);
86 be_pool_q_tlist_fini(&
pool->bpl_q_free);
87 be_pool_tlist_fini(&
pool->bpl_used);
88 be_pool_tlist_fini(&
pool->bpl_free);
154 M0_PRE(!be_pool_tlist_is_empty(&
pool->bpl_free));
156 item = be_pool_tlist_head(&
pool->bpl_free);
157 be_pool_tlist_del(
item);
158 be_pool_tlist_add_tail(&
pool->bpl_used,
item);
173 if (!be_pool_q_tlist_is_empty(&
pool->bpl_q_pending)) {
174 qi = be_pool_q_tlist_head(&
pool->bpl_q_pending);
175 be_pool_q_tlist_del(qi);
176 be_pool_q_tlist_add(&
pool->bpl_q_free, qi);
200 be_pool_tlink_init_at(
item, &
pool->bpl_free);
214 item = be_pool_tlist_head(&
pool->bpl_free);
219 be_pool_tlink_del_fini(
item);
236 if (!be_pool_tlist_is_empty(&
pool->bpl_free)) {
240 qi = be_pool_q_tlist_head(&
pool->bpl_q_free);
243 be_pool_q_tlist_del(qi);
244 be_pool_q_tlist_add_tail(&
pool->bpl_q_pending, qi);
263 be_pool_tlist_del(
item);
264 be_pool_tlist_add(&
pool->bpl_free,
item);
269 #undef M0_TRACE_SUBSYSTEM
static void be_pool_magic_set(const struct m0_be_pool_descr *d, void *obj, uint64_t magic)
#define M0_ALLOC_ARR(arr, nr)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
M0_INTERNAL int m0_be_pool_init(struct m0_be_pool *pool, struct m0_be_pool_cfg *cfg)
struct m0_be_op * bplq_op
static uint64_t magic(const struct m0_tl_descr *d, const void *obj)
struct m0_tlink bplq_link
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
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)
static struct m0_rpc_item * item
static void be_pool_got_free_item(const struct m0_be_pool_descr *d, struct m0_be_pool *pool)
M0_TL_DESCR_DEFINE(be_pool, "list of be_pool_items", static, struct m0_be_pool_item, bpli_link, bpli_magic, M0_BE_POOL_MAGIC, M0_BE_POOL_HEAD_MAGIC)
static void be_pool_lock(struct m0_be_pool *pool)
static bool be_pool_is_locked(struct m0_be_pool *pool)
static void * be_pool_amb(const struct m0_be_pool_descr *d, struct m0_be_pool_item *item)
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL bool m0_mutex_is_locked(const struct m0_mutex *mutex)
static const uint64_t BE_POOL_MAGIC_POISON
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
M0_INTERNAL void m0_be_op_done(struct m0_be_op *op)
M0_INTERNAL void m0_be_pool_add(const struct m0_be_pool_descr *d, struct m0_be_pool *pool, void *obj)
static void be_pool_unlock(struct m0_be_pool *pool)
static struct m0_pool pool
#define m0_forall(var, nr,...)
M0_INTERNAL void m0_be_op_active(struct m0_be_op *op)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
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)
#define M0_ASSERT_INFO(cond, fmt,...)
static uint64_t be_pool_magic(const struct m0_be_pool_descr *d, void *obj)
M0_TL_DEFINE(be_pool, static, struct m0_be_pool_item)
static void be_pool_get(const struct m0_be_pool_descr *d, struct m0_be_pool *pool, void **obj)
static struct m0_be_pool_item * be_pool_item(const struct m0_be_pool_descr *d, void *obj)
static bool be_pool_obj__invariant(const struct m0_be_pool_descr *d, void *obj)