23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_CONF 195 _0C(
l->dl_lvl <
l->dl_di->di_nr_lvls);
205 _0C(M0_IN(
it->di_phase,
207 _0C(
it->di_nr_lvls != 0);
213 const struct m0_fid *path)
255 return &
l->dl_cctx[
l->dl_mode].lc_ctx;
260 return &
it->di_lvls[
it->di_lvl];
286 const struct m0_fid *path)
295 .di_nr_lvls = nr_lvls,
302 for (lvl = 0; lvl < nr_lvls; ++lvl)
321 for (lvl = 0; lvl <
it->di_nr_lvls; ++lvl)
334 it->di_locked = locked;
364 l->dl_cctx[
l->dl_mode].lc_result = result;
378 origin =
it->di_origin;
380 prev_lvl = &
it->di_lvls[
it->di_lvl - 1];
423 it->di_phase = (
it->di_lvl <
it->di_nr_lvls - 1) ?
496 if (
it->di_lvl == 0) {
519 it->di_phase = (
it->di_lvl <
it->di_nr_lvls - 1) ?
542 M0_ENTRY(
"iterator level=%u phase=%u",
it->di_lvl,
it->di_phase);
546 rc = dit_action[
it->di_phase](
it);
582 lvl = &
it->di_lvls[
it->di_lvl];
590 #undef M0_TRACE_SUBSYSTEM
M0_INTERNAL void m0_chan_wait(struct m0_clink *link)
#define M0_ALLOC_ARR(arr, nr)
static struct m0_conf_obj * diter_lvl_entry_obj(struct m0_conf_diter_lvl *l)
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
M0_INTERNAL void m0_clink_del(struct m0_clink *link)
M0_INTERNAL void m0_clink_del_lock(struct m0_clink *link)
M0_INTERNAL struct m0_conf_obj * m0_confc_ctx_result(struct m0_confc_ctx *ctx)
M0_INTERNAL int m0_conf_diter_next_sync(struct m0_conf_diter *it, bool(*filter)(const struct m0_conf_obj *obj))
static struct m0_be_emap_cursor it
static int diter_lvl_read(struct m0_conf_diter *it)
M0_INTERNAL int32_t m0_confc_ctx_error_lock(const struct m0_confc_ctx *ctx)
static int diter_wait(struct m0_conf_diter *it)
#define container_of(ptr, type, member)
M0_INTERNAL bool m0_fid_is_set(const struct m0_fid *fid)
#define m0_confc_open(ctx, origin,...)
M0_INTERNAL int diter_lvl_open(struct m0_conf_diter *it)
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL void m0_confc_ctx_fini(struct m0_confc_ctx *ctx)
M0_INTERNAL void m0_chan_init(struct m0_chan *chan, struct m0_mutex *ch_guard)
M0_INTERNAL void m0_confc_ctx_fini_locked(struct m0_confc_ctx *ctx)
static struct m0_confc * confc
M0_INTERNAL bool m0_confc_ctx_is_completed(const struct m0_confc_ctx *ctx)
static void diter_confc_ctx_fini(struct m0_conf_diter *it, struct m0_confc_ctx *ctx)
M0_INTERNAL int m0_confc_ctx_init(struct m0_confc_ctx *ctx, struct m0_confc *confc)
M0_INTERNAL void m0_conf_diter_wait_arm(struct m0_conf_diter *it, struct m0_clink *clink)
static bool diter_invariant(const struct m0_conf_diter *it)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
static void diter_lvl_mode_set(struct m0_conf_diter_lvl *l, enum m0_diter_lvl_mode mode)
static int struct dentry int mode
M0_INTERNAL int m0_conf_diter_next(struct m0_conf_diter *it, bool(*filter)(const struct m0_conf_obj *obj))
static struct m0_clink clink[RDWR_REQUEST_MAX]
static struct fdmi_ctx ctx
static bool diter_chan_cb(struct m0_clink *link)
static struct m0_clink l[NR]
M0_INTERNAL void m0_chan_signal_lock(struct m0_chan *chan)
enum m0_diter_lvl_mode dl_mode
static struct m0_confc_ctx * diter_lvl_ctx(struct m0_conf_diter_lvl *l)
#define m0_forall(var, nr,...)
void m0_clink_add_lock(struct m0_chan *chan, struct m0_clink *link)
M0_INTERNAL void m0_conf_diter_locked_set(struct m0_conf_diter *it, bool locked)
static struct m0_conf_obj * diter_lvl_dir_obj(struct m0_conf_diter_lvl *l)
M0_INTERNAL void m0_conf_diter_lvl_fini(struct m0_conf_diter_lvl *l)
M0_INTERNAL struct m0_conf_obj * m0_conf_diter_result(const struct m0_conf_diter *it)
static void diter_lvl_result_set(struct m0_conf_diter_lvl *l, struct m0_conf_obj *result)
M0_INTERNAL void m0_clink_add(struct m0_chan *chan, struct m0_clink *link)
M0_INTERNAL void m0_conf_diter_fini(struct m0_conf_diter *it)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
enum m0_conf_status co_status
static void diter_wait_arm(struct m0_conf_diter *it, struct m0_confc_ctx *ctx)
M0_INTERNAL void m0_confc_close(struct m0_conf_obj *obj)
M0_INTERNAL void m0_conf_diter_lvl_init(struct m0_conf_diter_lvl *l, struct m0_conf_diter *it, struct m0_confc *confc, uint32_t lvl, const struct m0_fid *path)
static bool diter_lvl_invariant(const struct m0_conf_diter_lvl *l)
static void diter_lvl_check(struct m0_conf_diter *it)
static void diter_wait_cancel(struct m0_clink *clink, bool locked)
static struct m0_conf_diter_lvl * diter_lvl(struct m0_conf_diter *it)
M0_INTERNAL void m0_chan_fini_lock(struct m0_chan *chan)
M0_INTERNAL int m0_conf__diter_init(struct m0_conf_diter *it, struct m0_confc *confc, struct m0_conf_obj *origin, uint32_t nr_lvls, const struct m0_fid *path)
M0_INTERNAL int32_t m0_confc_ctx_error(const struct m0_confc_ctx *ctx)
static struct m0_conf_obj * diter_lvl_origin(struct m0_conf_diter *it)
M0_INTERNAL int m0_confc_readdir(struct m0_confc_ctx *ctx, struct m0_conf_obj *dir, struct m0_conf_obj **pptr)
#define M0_IMPOSSIBLE(fmt,...)