23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_STOB 59 result =
obj->so_ops->sop_io_init(
obj,
io);
141 struct m0_io_scope *scope,
156 struct m0_dtx *tx,
struct m0_io_scope *scope)
170 result =
obj->so_ops->sop_io_init(
obj,
io);
193 struct m0_dtx *tx,
struct m0_io_scope *scope)
222 struct m0_io_scope *scope)
240 for (reached = 0,
i = 0;
i <
stob->iv_vec.v_nr; ++
i) {
241 if (
stob->iv_index[
i] < reached)
243 reached =
stob->iv_index[
i] +
stob->iv_vec.v_count[
i];
273 .iv_index = &offset_idx
299 return (
void *)(
addr >> shift);
308 return (
void *)(
addr << shift);
317 bool separate_v_count;
319 #define SWAP_NEXT(arr, idx) \ 322 typeof(&arr[idx]) _arr = (arr); \ 323 typeof(arr[idx]) _tmp; \ 326 _arr[_idx] = _arr[_idx + 1]; \ 327 _arr[_idx + 1] = _tmp; \ 344 if (separate_v_count)
354 #undef M0_TRACE_SUBSYSTEM
M0_INTERNAL struct m0_stob_domain * m0_stob_dom_get(struct m0_stob *stob)
M0_INTERNAL void m0_chan_wait(struct m0_clink *link)
enum m0_stob_io_flags si_flags
M0_INTERNAL int m0_stob_io_bufvec_launch(struct m0_stob *stob, struct m0_bufvec *bufvec, int op_code, m0_bindex_t offset)
M0_INTERNAL bool m0_stob_io_user_is_valid(const struct m0_bufvec *user)
M0_INTERNAL void m0_stob_io_fini(struct m0_stob_io *io)
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
M0_INTERNAL void m0_clink_del_lock(struct m0_clink *link)
M0_INTERNAL void m0_stob_io_credit(const struct m0_stob_io *io, const struct m0_stob_domain *dom, struct m0_be_tx_credit *accum)
M0_INTERNAL bool m0_chan_has_waiters(struct m0_chan *chan)
#define M0_LOG(level,...)
M0_INTERNAL const struct m0_fid * m0_stob_domain_id_get(const struct m0_stob_domain *dom)
#define M0_ADDB2_PUSH(id,...)
const struct m0_stob_io_op * si_op
M0_INTERNAL const struct m0_fid * m0_stob_fid_get(struct m0_stob *stob)
M0_ADDB2_ADD(M0_AVI_FS_CREATE, new_fid.f_container, new_fid.f_key, mode, rc)
int(* sio_launch)(struct m0_stob_io *io)
void(* sio_fini)(struct m0_stob_io *io)
M0_INTERNAL uint32_t m0_stob_block_shift(struct m0_stob *stob)
M0_INTERNAL uint64_t m0_dummy_id_generate(void)
M0_INTERNAL int m0_stob_io_prepare_and_launch(struct m0_stob_io *io, struct m0_stob *obj, struct m0_dtx *tx, struct m0_io_scope *scope)
M0_INTERNAL const struct m0_stob_id * m0_stob_id_get(struct m0_stob *stob)
struct m0_indexvec si_stob
static struct m0_stob * stob
M0_INTERNAL void m0_chan_init(struct m0_chan *chan, struct m0_mutex *ch_guard)
int(* sio_prepare)(struct m0_stob_io *io)
m0_time_t m0_time_now(void)
static bool stob_io_invariant(struct m0_stob_io *io, struct m0_stob *obj, enum m0_stob_io_state state)
static struct m0_bufvec bvec
static struct m0_stob_domain * dom
M0_INTERNAL void * m0_stob_addr_pack(const void *buf, uint32_t shift)
M0_INTERNAL int m0_stob_io_private_setup(struct m0_stob_io *io, struct m0_stob *obj)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
enum m0_stob_io_state si_state
static m0_bindex_t offset
static struct m0_clink clink[RDWR_REQUEST_MAX]
static struct m0_stob_io io
void m0_addb2_pop(uint64_t id)
M0_INTERNAL m0_bcount_t m0_vec_count(const struct m0_vec *vec)
static void stob_io_fill(struct m0_stob_io *io, struct m0_stob *obj, struct m0_dtx *tx, struct m0_io_scope *scope, enum m0_stob_io_state state, bool count_update)
void m0_clink_add_lock(struct m0_chan *chan, struct m0_clink *link)
M0_INTERNAL enum m0_stob_state m0_stob_state_get(struct m0_stob *stob)
M0_INTERNAL void * m0_stob_addr_open(const void *buf, uint32_t shift)
static void stob_io_addb2_add_and_push(uint64_t id, struct m0_stob_io *io, struct m0_stob *obj)
M0_INTERNAL void m0_stob_iovec_sort(struct m0_stob_io *stob)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
void(* sdo_stob_write_credit)(const struct m0_stob_domain *dom, const struct m0_stob_io *io, struct m0_be_tx_credit *accum)
M0_INTERNAL void m0_stob_io_init(struct m0_stob_io *io)
const struct m0_stob_domain_ops * sd_ops
#define M0_ASSERT_INFO(cond, fmt,...)
#define SWAP_NEXT(arr, idx)
M0_INTERNAL int m0_stob_io_launch(struct m0_stob_io *io, struct m0_stob *obj, struct m0_dtx *tx, struct m0_io_scope *scope)
M0_INTERNAL int m0_stob_io_prepare(struct m0_stob_io *io, struct m0_stob *obj, struct m0_dtx *tx, struct m0_io_scope *scope)
M0_INTERNAL void m0_chan_fini_lock(struct m0_chan *chan)
struct m0_io_scope * si_scope
M0_INTERNAL uint8_t m0_stob_domain__type_id(const struct m0_fid *dom_id)
M0_INTERNAL bool m0_stob_io_stob_is_valid(const struct m0_indexvec *stob)
static void m0_stob_io_private_fini(struct m0_stob_io *io)
enum m0_stob_io_opcode si_opcode