23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_UT 41 #define OWNER(srv_id) rm_ctxs[srv_id].rc_test_data.rd_owner 42 #define INREQ(srv_id) (&rm_ctxs[srv_id].rc_test_data.rd_in) 104 self->rd_owner = owner;
121 .credit_datum_set =
NULL 590 #undef M0_TRACE_SUBSYSTEM
static void rwlock_acquire_nowait(enum rm_server srv, struct m0_rm_incoming *in, enum m0_rm_incoming_flags flags, enum m0_rm_rwlock_req_type req_type)
static void rwlockable_res_set(struct rm_ut_data *self)
int const char const void size_t int flags
struct rm_ctx rm_ctxs[SERVER_NR]
void creditor_cookie_setup(enum rm_server dsrv_id, enum rm_server csrv_id)
static struct buffer * cur(struct m0_addb2_mach *mach, m0_bcount_t space)
void rwlock_write_read_hold_test1(void)
void rwlock_write_test(void)
void(* rio_complete)(struct m0_rm_incoming *in, int32_t rc)
const m0_time_t M0_TIME_NEVER
M0_INTERNAL bool m0_semaphore_timeddown(struct m0_semaphore *semaphore, const m0_time_t abs_timeout)
static void rwlock_build_hierarchy(void)
static void rm_ctx_init(struct m0_rm_lock_ctx *ctx, struct m0_client *m0c, struct m0_fid *fid)
static const struct rm_ut_data_ops rwlock_ut_data_ops
struct rm_ut_data rc_test_data
const struct m0_rm_resource_type_ops rwlockable_type_ops
struct m0_ut_suite rm_rwlock_ut
M0_INTERNAL void m0_rm_rwlock_req_init(struct m0_rm_incoming *req, struct m0_rm_owner *owner, const struct m0_rm_incoming_ops *ops, enum m0_rm_incoming_flags flags, enum m0_rm_rwlock_req_type type)
static void rwlock_servers_windup(void)
bool(* rto_eq)(const struct m0_rm_resource *resource0, const struct m0_rm_resource *resource1)
struct m0_rm_resource_type * rd_rt
void rwlock_read_read_sharing_test(void)
#define container_of(ptr, type, member)
void rwlock_two_read_locks_test(void)
M0_INTERNAL void m0_rw_lockable_fini(struct m0_rw_lockable *lockable)
static void rwlock_release(struct m0_rm_incoming *in)
static struct m0_semaphore conflict_sem
M0_INTERNAL int m0_sm_timedwait(struct m0_sm *mach, uint64_t states, m0_time_t deadline)
void rwlock_read_test(void)
M0_INTERNAL int m0_bufvec_alloc(struct m0_bufvec *bufvec, uint32_t num_segs, m0_bcount_t seg_size)
struct m0_rm_resource rwl_resource
static void rwlock_incoming_complete(struct m0_rm_incoming *in, int32_t rc)
M0_INTERNAL void m0_rm_rwlock_owner_init(struct m0_rm_owner *owner, struct m0_fid *fid, struct m0_rw_lockable *lockable, struct m0_rm_remote *creditor)
static void rwlockable_rtype_set(struct rm_ut_data *self)
M0_INTERNAL void m0_bufvec_free(struct m0_bufvec *bufvec)
static void rm_ctx_fini(struct m0_ref *ref)
static void rwlock_incoming_conflict(struct m0_rm_incoming *in)
M0_INTERNAL void m0_fid_set(struct m0_fid *fid, uint64_t container, uint64_t key)
static enum m0_rm_owner_state owner_state(const struct m0_rm_owner *owner)
M0_INTERNAL void m0_rm_rwlock_owner_fini(struct m0_rm_owner *owner)
#define M0_FID_TINIT(type, container, key)
static enum rm_server test_servers_nr
static enum m0_rm_incoming_state incoming_state(const struct m0_rm_incoming *in)
static void rwlock_servers_disc_fini(void)
void rm_ctxs_conf_fini(struct rm_ctx *rm_ctxs, int ctxs_nr)
M0_INTERNAL void m0_rw_lockable_init(struct m0_rw_lockable *lockable, const struct m0_fid *fid, struct m0_rm_domain *dom)
M0_INTERNAL void m0_bufvec_cursor_init(struct m0_bufvec_cursor *cur, const struct m0_bufvec *bvec)
static void rwlock_acquire(enum rm_server srv, struct m0_rm_incoming *in, enum m0_rm_incoming_flags flags, enum m0_rm_rwlock_req_type req_type)
M0_INTERNAL void m0_rm_rwlock_req_fini(struct m0_rm_incoming *req)
static struct rectype rt[]
static void rwlock_utinit(void)
void(* rtype_set)(struct rm_ut_data *self)
enum rm_server debtor_id[SERVER_NR - 1]
M0_INTERNAL int m0_semaphore_init(struct m0_semaphore *semaphore, unsigned value)
const struct m0_rm_incoming_ops rwlock_incoming_ops
static void rwlock_utfini(void)
int(* rto_decode)(struct m0_bufvec_cursor *cur, struct m0_rm_resource **resource)
void rwlock_write_read_hold_test2(void)
static void rwlockable_res_unset(struct rm_ut_data *self)
M0_INTERNAL void m0_rm_resource_free(struct m0_rm_resource *res)
static void rwlock_owner_unset(struct rm_ut_data *self)
void rm_ctxs_conf_init(struct rm_ctx *rm_ctxs, int ctxs_nr)
static void rwlock_encdec_test()
static void rwlock_owner_set(struct rm_ut_data *self)
const struct rm_ut_data_ops * rd_ops
M0_INTERNAL void m0_rm_credit_put(struct m0_rm_incoming *in)
void rwlock_write_write_hold_test(void)
int(* rto_encode)(struct m0_bufvec_cursor *cur, const struct m0_rm_resource *resource)
void rwlock_read_write_hold_test(void)
#define M0_ALLOC_PTR(ptr)
M0_INTERNAL void m0_semaphore_fini(struct m0_semaphore *semaphore)
static void rwlock_req_wait(enum rm_server srv, struct m0_rm_incoming *in)
m0_time_t m0_time_from_now(uint64_t secs, long ns)
static void rwlockable_rtype_unset(struct rm_ut_data *self)
enum rm_server creditor_id
const struct m0_rm_resource_type_ops * rt_ops
M0_INTERNAL void m0_rm_owner_unlock(struct m0_rm_owner *owner)
M0_INTERNAL int m0_rm_type_register(struct m0_rm_domain *dom, struct m0_rm_resource_type *rt)
static struct m0_semaphore waiting_sem
void rwlock_read_read_hold_test(void)
void credits_are_equal(enum rm_server srv_id, enum rm_ut_credits_list list_id, uint64_t value)
struct m0_rm_resource * rd_res
M0_INTERNAL void m0_rm_owner_lock(struct m0_rm_owner *owner)
M0_INTERNAL void m0_semaphore_up(struct m0_semaphore *semaphore)
M0_INTERNAL void m0_rm_type_deregister(struct m0_rm_resource_type *rt)
void rm_ctx_server_stop(enum rm_server srv_id)
void rwlock_writer_starvation_test(void)
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 struct net_srv srv