34 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_CLIENT    50         m0_op_layout_bob_init(ol);
    51         m0_ast_rc_bob_init(&ol->
ol_ar);
    52         m0_op_common_bob_init(&ol->
ol_oc);
    98         obj.ob_entity.en_id = 
id;
   127         .olo_copy_to_app   = 
NULL,
   128         .olo_copy_from_app = 
NULL,
   153         en_grp = &
ent.en_sm_group;
   240         obj.ob_entity.en_id = 
id;
   299         obj.ob_entity.en_id = 
id;
   300         obj.ob_attr.oa_layout_id = 12;
   301         obj.ob_attr.oa_pver = (
struct m0_fid){.f_container = 24, .f_key = 36};
   305         pdlayout = 
M0_AMB(pdlayout, orig_layout, pl_layout);
   307         pdlayout->
pl_lid = 
obj.ob_attr.oa_layout_id;
   312         cap_layout = 
M0_AMB(cap_layout, layout, cl_layout);
   342         obj.ob_entity.en_id = 
id;
   343         obj.ob_attr.oa_pver = (
struct m0_fid){.f_container = 24, .f_key = 36};
   352         m0_op_obj_bob_init(&oci->
oci_oo);
   353         m0_op_composite_io_bob_init(oci);
   362         for (
i = 0; 
i < nr_subobjs; 
i++) {
   367                 sio_ext_tlist_init(&sio_arr[
i].si_exts);
   373                 sio_ext_tlink_init_at(sio_ext, &sio_arr[
i].si_exts);
   376         m0_fi_enable(
"m0__obj_attr_get_sync", 
"obj_attr_get_ok");
   420         en_grp = &
ent.en_sm_group;
   425         m0_fi_enable(
"composite_io_op_cb_launch", 
"no_subobj_ops_launched");
   434         m0_fi_disable(
"composite_io_op_cb_launch", 
"no_subobj_ops_launched");
   465         m0_fi_enable(
"composite_io_op_cb_free", 
"skip_free_sub_io_op");
   467         m0_fi_disable(
"composite_io_op_cb_free", 
"skip_free_sub_io_op");
   490         m0_fi_enable(
"composite_io_op_cb_fini", 
"skip_fini_sub_io_op");
   492         m0_fi_disable(
"composite_io_op_cb_fini", 
"skip_fini_sub_io_op");
   514         obj.ob_entity.en_id = 
id;
   515         obj.ob_attr.oa_layout_id = 12;
   516         obj.ob_attr.oa_pver = (
struct m0_fid){.f_container = 24, .f_key = 36};
   520         clayout = 
M0_AMB(clayout, layout, ccl_layout);
   523         m0_fi_enable(
"m0__obj_attr_get_sync", 
"obj_attr_get_ok");
   528                            found->ccr_priority == 0);
   553         obj.ob_entity.en_id = 
id;
   554         obj.ob_attr.oa_layout_id = 12;
   555         obj.ob_attr.oa_pver = (
struct m0_fid){.f_container = 24, .f_key = 36};
   559         clayout = 
M0_AMB(clayout, layout, ccl_layout);
   562         m0_fi_enable(
"m0__obj_attr_get_sync", 
"obj_attr_get_ok");
   565         obj.ob_entity.en_id.u_lo++;
   576                                          &
obj.ob_entity.en_id));
   603         obj.ob_entity.en_id = 
id;
   610         oo = 
M0_AMB(oo, oc, oo_oc);
   615         for (
i = 0; 
i < nr_subobjs; 
i++) {
   620                 sio_ext_tlist_init(&sio_arr[
i].si_exts);
   626                 sio_ext_tlink_init_at(sio_ext, &sio_arr[
i].si_exts);
   629         m0_fi_enable(
"m0__obj_attr_get_sync", 
"obj_attr_get_ok");
   668         m0_fi_enable(
"m0__obj_attr_get_sync", 
"obj_attr_get_ok");
   669         for (
i = 0; 
i < nr_layers; 
i++) {
   671                 obj.ob_entity.en_id = 
id;
   672                 obj.ob_attr.oa_layout_id = 12;
   673                 obj.ob_attr.oa_pver = (
struct m0_fid){.f_container = 24, .f_key = 36};
   678                 for (j = 0; j < 
i; j++)
   692                                   int nr_io_segs, 
struct io_seg *io_segs,
   706         for (
i = 0; 
i < nr_io_segs; 
i++) {
   716         for (
i = 0; 
i < nr_io_segs; 
i++) {
   722                                  &ext, &
data, sio_arr, nr_subobjs);
   754         clayout = 
M0_AMB(clayout, layout, ccl_layout);
   772                 ext->
ce_id = layer_ids[
i];
   776                 cext_tlink_init_at_tail(ext, ext_list);
   784         for (
i = 0; 
i < nr_io_segs; 
i++) {
   795         for (
i = 0; 
i < nr_sios; 
i++) {
   801                 sio_ext = sio_ext_tlist_head(&sio->
si_exts);
   825         struct m0_tl                      *ext_list;
   852         for (
i = 0; 
i < nr_kvp; 
i++) {
   855                 key.cek_off = 
i * 4096;
   869         for (
i = 0; 
i < nr_kvp; 
i++) {
   879         for (
i = 0; 
i < nr_kvp; 
i++) {
   883                         key.cek_layer_id.u_lo++;
   884                 key.cek_off = 
i * 4096;
   926                 { 
"layout_op_invariant",
   930                 { 
"layout_op_cb_launch",
   932                 { 
"layout_op_cb_free",
   934                 { 
"layout_op_cb_fini",
   938                 { 
"m0_client_layout_alloc",
   940                 { 
"m0_layout_capture",
   942                 { 
"composite_io_op_cb_launch",
   944                 { 
"composite_io_op_cb_free",
   946                 { 
"composite_io_op_cb_fini",
   948                 { 
"m0_composite_layer_add",
   950                 { 
"m0_composite_layer_del",
   952                 { 
"composite_sub_io_ops_build",
   954                 { 
"composite_io_divide",
   956                 { 
"composite_layer_idx_extents_extract",
   958                 { 
"composite_layer_idx_scan",
   964 #undef M0_TRACE_SUBSYSTEM const struct m0_client_layout_ops layout_composite_ops
#define M0_ALLOC_ARR(arr, nr)
static void ut_m0_layout_op(void)
static void ut_composite_layer_idx_extents_extract(void)
void m0_entity_fini(struct m0_entity *entity)
M0_INTERNAL int m0_op_get(struct m0_op **op, size_t size)
static int composite_io_divide(struct m0_client_composite_layout *clayout, enum m0_obj_opcode opcode, struct m0_indexvec *ext, struct m0_bufvec *data, struct composite_sub_io **out, int *out_nr_sios)
static void ut_layout_op_init(void)
M0_INTERNAL int m0_indexvec_alloc(struct m0_indexvec *ivec, uint32_t len)
static void layout_op_cb_free(struct m0_op_common *oc)
struct m0_sm_group * ol_sm_grp
static struct m0_client * dummy_instance
M0_INTERNAL bool m0_uint128_eq(const struct m0_uint128 *u0, const struct m0_uint128 *u1)
static struct m0_op_layout * ut_m0_op_layout_alloc()
static void ut_composite_io_op_cb_free(void)
struct m0_sm_group * oo_sm_grp
static void ut_layout_op_invariant(void)
M0_INTERNAL void m0_indexvec_free(struct m0_indexvec *ivec)
M0_INTERNAL int ut_suite_layout_fini(void)
static const struct m0_client_layout_ops layout_pdclust_ops
static void composite_io_op_cb_fini(struct m0_op_common *oc)
M0_INTERNAL int ut_m0_client_init(struct m0_client **instance)
static int op_layout_dummy_launch(struct m0_op_layout *ol)
M0_INTERNAL void m0_sm_group_fini(struct m0_sm_group *grp)
static const struct m0_client_layout_ops layout_capture_ops
const struct m0_uint128 M0_ID_APP
static void composite_sub_io_destroy(struct composite_sub_io *sio_arr, int nr_subobjs)
int(* olo_launch)(struct m0_op_layout *ol)
static uint32_t unit_size
M0_INTERNAL void m0_bufvec_free(struct m0_bufvec *bufvec)
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
static void ut_layout_op_cb_launch(void)
enum m0_client_layout_type ml_type
static void ut_composite_layer_idx_scan(void)
static void ut_composite_io_divide(void)
static void ut_m0_composite_layer_add(void)
M0_INTERNAL void ut_realm_entity_setup(struct m0_realm *realm, struct m0_entity *ent, struct m0_client *cinst)
static void ut_composite_io_op_cb_launch(void)
struct m0_client_layout * m0_client_layout_alloc(enum m0_client_layout_type type)
struct m0_uint128 cl_orig_id
#define M0_AMB(obj, ptr, field)
#define m0_tl_teardown(name, head, obj)
M0_INTERNAL void m0_fi_disable(const char *fp_func, const char *fp_tag)
static void m0_fi_enable(const char *func, const char *tag)
static void layout_op_cb_launch(struct m0_op_common *oc)
void m0_client_layout_free(struct m0_client_layout *layout)
M0_INTERNAL void ut_m0_client_fini(struct m0_client **instance)
M0_INTERNAL void m0_sm_group_init(struct m0_sm_group *grp)
int m0_composite_layer_idx_key_to_buf(struct m0_composite_layer_idx_key *key, void **out_kbuf, m0_bcount_t *out_klen)
static int composite_sub_io_ops_build(struct m0_obj *cobj, struct m0_op *cop, struct composite_sub_io *sio_arr, int nr_subobjs)
static void ut_m0_layout_capture(void)
static void ut_layout_op_cb_fini(void)
struct m0_op_common ol_oc
void * m0_alloc(size_t size)
static void ut_m0_composite_layer_del(void)
void m0_composite_layer_del(struct m0_client_layout *layout, struct m0_uint128 subobj_id)
static struct m0_op_composite_io * ut_composite_io_op_alloc()
static void ut_m0_op_layout_free(struct m0_op_layout *ol)
static void ut_m0_client_layout_alloc(void)
struct m0_op_common oo_oc
static int composite_layer_idx_extents_extract(struct m0_composite_layer *layer, struct m0_bufvec *keys, struct m0_bufvec *vals, int *rcs, struct m0_tl *ext_list, struct m0_composite_layer_idx_key *max_key)
static void ut_composite_io_op_free(struct m0_op_composite_io *oci)
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
struct m0_uint128 ccr_subobj
struct m0_sm_group op_sm_group
static struct m0_op_layout_ops op_layout_dummy_ops
struct m0_ut_suite ut_suite_layout
struct m0_op ** oci_sub_ops
M0_INTERNAL void m0_sm_init(struct m0_sm *mach, const struct m0_sm_conf *conf, uint32_t state, struct m0_sm_group *grp)
#define M0_ALLOC_PTR(ptr)
static struct m0_realm realm
struct m0_entity * op_entity
int m0_composite_layer_add(struct m0_client_layout *layout, struct m0_obj *sub_obj, int priority)
static void layout_op_cb_fini(struct m0_op_common *oc)
static void ut_layout_op_cb_free(void)
static void ut_composite_sub_io_ops_build(void)
const struct m0_op_layout_ops * ol_ops
int m0_client_layout_op(struct m0_obj *obj, enum m0_entity_opcode opcode, struct m0_client_layout *layout, struct m0_op **op)
M0_INTERNAL void m0_sm_move(struct m0_sm *mach, int32_t rc, int state)
const struct m0_client_layout_ops * ml_ops
static struct m0 instance
static void ut_composite_io_op_cb_fini(void)
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
static int composite_layout_add_layers(struct m0_client_layout *layout, int nr_layers, struct m0_uint128 *layer_ids)
static void m0_fi_enable_once(const char *func, const char *tag)
static int do_composite_io_divide(struct m0_client_composite_layout *clayout, int nr_io_segs, struct io_seg *io_segs, struct composite_sub_io **sio_arr, int *nr_subobjs)
int m0_client_layout_capture(struct m0_client_layout *layout, struct m0_obj *obj, struct m0_client_layout **out)
M0_INTERNAL int ut_suite_layout_init(void)
static void composite_io_op_cb_launch(struct m0_op_common *oc)
static int layout_op_init(struct m0_obj *obj, struct m0_client_layout *layout, enum m0_entity_opcode opcode, struct m0_op *op)
static bool layout_op_invariant(struct m0_op_layout *ol)
#define m0_tl_find(name, var, head,...)
#define m0_tl_for(name, head, obj)
int m0_composite_layer_idx_val_to_buf(struct m0_composite_layer_idx_val *val, void **out_vbuf, m0_bcount_t *out_vlen)
struct m0_sm_conf m0_op_conf
M0_INTERNAL int m0_bufvec_empty_alloc(struct m0_bufvec *bufvec, uint32_t num_segs)
M0_INTERNAL void m0_sm_fini(struct m0_sm *mach)
static void composite_io_op_cb_free(struct m0_op_common *oc)