static void server3_tests(void)
M0_INTERNAL void m0_chan_wait(struct m0_clink *link)
static void server2_tests(void)
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
struct rm_ctx rm_ctxs[SERVER_NR]
M0_INTERNAL void m0_clink_del_lock(struct m0_clink *link)
void creditor_cookie_setup(enum rm_server dsrv_id, enum rm_server csrv_id)
int m0_thread_join(struct m0_thread *q)
void(* rio_complete)(struct m0_rm_incoming *in, int32_t rc)
const m0_time_t M0_TIME_NEVER
static void standalone_borrow_run(void)
static void server1_tests(void)
M0_INTERNAL bool m0_semaphore_timeddown(struct m0_semaphore *semaphore, const m0_time_t abs_timeout)
static void rm_ctx_init(struct m0_rm_lock_ctx *ctx, struct m0_client *m0c, struct m0_fid *fid)
struct rm_ut_data rc_test_data
static void rm_server_start(const int tid)
struct m0_rm_owner * rd_owner
#define M0_THREAD_INIT(thread, TYPE, init, func, arg, namefmt,...)
struct m0_rm_credit rin_want
static void ring_get(enum rm_server srv_id, uint64_t group, enum m0_rm_incoming_flags in_flag, int which_ring)
static void rmg_in_conflict(struct m0_rm_incoming *in)
M0_INTERNAL int m0_sm_timedwait(struct m0_sm *mach, uint64_t states, m0_time_t deadline)
static struct m0_semaphore startup_sem
static void rm_ctx_fini(struct m0_ref *ref)
struct m0_chan rm_ut_tests_chan
void loan_session_set(enum rm_server csrv_id, enum rm_server dsrv_id)
M0_INTERNAL void m0_rm_incoming_init(struct m0_rm_incoming *in, struct m0_rm_owner *owner, enum m0_rm_incoming_type type, enum m0_rm_incoming_policy policy, uint64_t flags)
M0_INTERNAL void m0_chan_init(struct m0_chan *chan, struct m0_mutex *ch_guard)
static void standalone_borrow_verify(void)
void rm_ctxs_conf_fini(struct rm_ctx *rm_ctxs, int ctxs_nr)
void m0_thread_fini(struct m0_thread *q)
const struct m0_rm_incoming_ops * rin_ops
static void group_borrow_verify(enum rm_server srv_id)
enum rm_server debtor_id[SERVER_NR - 1]
M0_INTERNAL int m0_semaphore_init(struct m0_semaphore *semaphore, unsigned value)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
static const struct m0_rm_incoming_ops rmg_incoming_ops
M0_INTERNAL void m0_chan_signal_lock(struct m0_chan *chan)
void rm_ctxs_conf_init(struct rm_ctx *rm_ctxs, int ctxs_nr)
static void server_hier_config(void)
void m0_clink_add_lock(struct m0_chan *chan, struct m0_clink *link)
static struct m0_clink group_tests_clink[GROUP_TESTS_NR]
M0_INTERNAL void m0_rm_credit_put(struct m0_rm_incoming *in)
static enum rm_server test_servers_nr
static uint64_t M0_RM_SNS_GROUP
M0_INTERNAL void m0_semaphore_fini(struct m0_semaphore *semaphore)
m0_time_t m0_time_from_now(uint64_t secs, long ns)
bool m0_rm_ur_tlist_is_empty(const struct m0_tl *list)
struct m0_tl ro_owned[OWOS_NR]
enum rm_server creditor_id
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
M0_INTERNAL void m0_rm_incoming_fini(struct m0_rm_incoming *in)
struct m0_rm_incoming rd_in
M0_INTERNAL void m0_rm_owner_unlock(struct m0_rm_owner *owner)
#define M0_UINT128(hi, lo)
void rings_utdata_ops_set(struct rm_ut_data *data)
static void group_borrow_run(enum rm_server srv_id)
static void rmg_in_complete(struct m0_rm_incoming *in, int32_t rc)
M0_INTERNAL void m0_rm_owner_lock(struct m0_rm_owner *owner)
M0_INTERNAL void m0_semaphore_up(struct m0_semaphore *semaphore)
struct m0_uint128 cr_group_id
void rm_ctx_server_stop(enum rm_server srv_id)
static void group_revoke_verify(void)
static void rm_group_utfini(void)
M0_INTERNAL void m0_chan_fini_lock(struct m0_chan *chan)
static void rm_group_utinit(void)
struct m0_mutex rm_ut_tests_chan_mutex
void rm_ctx_server_start(enum rm_server srv_id)
M0_INTERNAL void m0_rm_credit_get(struct m0_rm_incoming *in)
void rm_ctx_server_owner_windup(enum rm_server srv_id)
static void group_revoke_run(void)