23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_SNSCM 58 SNS_DEFAULT_LAYOUT_ID = 1,
59 #elif defined (CONFIG_AARCH64) 60 SNS_DEFAULT_LAYOUT_ID = 5,
62 #error "The platform is not supported" 83 pver = pool_version_tlist_head(&
p->po_vers);
94 lid = SNS_DEFAULT_LAYOUT_ID;
127 uint64_t unit_number,
278 uint64_t group_nr, uint64_t spare_nr)
280 uint64_t data_unit_id_out;
291 M0_ENTRY(
"index:%d", (
int)spare_nr);
426 rc = m0_conf_service_get(
confc, &svc_fid, &
svc);
445 *hostage = &
svc->cs_obj;
446 return svc->cs_endpoints[0];
474 size_t group_failures = 0;
485 for (unit = 0; unit < upg; ++unit) {
493 if (fmap_out !=
NULL) {
500 M0_LEAVE(
"number of failures in group = %lu are %u",
501 (
unsigned long)
group, (
unsigned)group_failures);
502 return group_failures;
510 size_t group_failures;
517 group =
id->ai_lo.u_lo;
520 if (group_failures > 0 )
523 return M0_RC(result);
530 uint32_t *in_units_nr,
536 in_units_nr, pcount);
562 for (k = 0; conf_pvers[k] !=
NULL; ++k) {
567 pver->pv_sns_flags = 0;
591 uint64_t nr_devs = 0;
594 if (pd->pd_state == state)
603 nvec->
nv_nr = nr_devs + 1;
611 uint32_t units_per_group, uint64_t
group)
622 for (
i = 0;
i < units_per_group; ++
i) {
660 #undef M0_TRACE_SUBSYSTEM uint64_t(* sch_ag_unit_start)(const struct m0_pdclust_layout *pl)
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_global_units(const struct m0_sns_cm_ag *sag, struct m0_pdclust_layout *pl)
M0_INTERNAL struct m0_layout * m0_layout_find(struct m0_layout_domain *dom, uint64_t lid)
M0_INTERNAL void m0_sns_cm_pver_dirty_set(struct m0_pool_version *pver)
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_data_units(const struct m0_pdclust_layout *pl)
M0_INTERNAL bool m0_sns_cm_ag_is_relevant(struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, const struct m0_cm_ag_id *id)
static struct m0_addb2_philter p
M0_INTERNAL void m0_sns_cm_unit2cobfid(struct m0_sns_cm_file_ctx *fctx, const struct m0_pdclust_src_addr *sa, struct m0_pdclust_tgt_addr *ta, struct m0_fid *cfid_out)
#define M0_ALLOC_ARR(arr, nr)
M0_INTERNAL bool m0_sns_cm_pver_is_dirty(struct m0_pool_version *pver)
M0_INTERNAL bool m0_sns_cm_fid_is_valid(const struct m0_sns_cm *snscm, const struct m0_fid *fid)
M0_INTERNAL struct m0_rpc_machine * m0_cm_rpc_machine_find(struct m0_reqh *reqh)
M0_INTERNAL void agid2fid(const struct m0_cm_ag_id *id, struct m0_fid *fid)
M0_INTERNAL uint64_t m0_fid_hash(const struct m0_fid *fid)
M0_INTERNAL const char * m0_sns_cm_tgt_ep(const struct m0_cm *cm, const struct m0_pool_version *pv, const struct m0_fid *cob_fid, struct m0_conf_obj **hostage)
M0_INTERNAL uint64_t m0_sns_cm_ag_unit_start(const struct m0_sns_cm *scm, const struct m0_pdclust_layout *pl)
struct m0_pool_version * pm_pver
M0_INTERNAL struct m0_pool_version * m0_pool_version_find(struct m0_pools_common *pc, const struct m0_fid *id)
struct m0_pool_version * pv
#define M0_LOG(level,...)
M0_INTERNAL void m0_sns_cm_file_fwd_map(struct m0_sns_cm_file_ctx *fctx, const struct m0_pdclust_src_addr *sa, struct m0_pdclust_tgt_addr *ta)
M0_INTERNAL bool m0_sns_cm_is_local_cob(const struct m0_cm *cm, const struct m0_pool_version *pv, const struct m0_fid *cob_fid)
M0_INTERNAL void m0_uint128_init(struct m0_uint128 *u128, const char *magic)
M0_INTERNAL int m0_linear_enum_build(struct m0_layout_domain *dom, const struct m0_layout_linear_attr *attr, struct m0_layout_linear_enum **out)
M0_INTERNAL void m0_layout_enum_fini(struct m0_layout_enum *le)
struct m0_layout * sf_layout
struct m0_cm_ag_id cag_id
M0_INTERNAL void m0_sns_cm_fctx_unlock(struct m0_sns_cm_file_ctx *fctx)
M0_INTERNAL void m0_cob_put(struct m0_cob *cob)
static struct m0_sns_cm * scm
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_parity_units(const struct m0_pdclust_layout *pl)
M0_INTERNAL int m0_poolmach_device_state(struct m0_poolmach *pm, uint32_t device_index, enum m0_pool_nd_state *state_out)
M0_INTERNAL int m0_sns_cm_ag_tgt_unit2cob(struct m0_sns_cm_ag *sag, uint64_t tgt_unit, struct m0_fid *cobfid)
struct m0_poolmach * sf_pm
struct m0_conf_pver ** ck_pvers
M0_INTERNAL const char * m0_rpc_machine_ep(const struct m0_rpc_machine *rmach)
M0_INTERNAL bool m0_fid_is_set(const struct m0_fid *fid)
M0_INTERNAL uint64_t m0_sns_cm_ag_unit2cobindex(struct m0_sns_cm_ag *sag, uint64_t unit)
M0_INTERNAL uint64_t m0_sns_cm_ag_unit_end(const struct m0_sns_cm *scm, const struct m0_pdclust_layout *pl)
static struct m0_pools_common pc
int(* sch_ag_in_cp_units)(const struct m0_sns_cm *scm, const struct m0_cm_ag_id *id, struct m0_sns_cm_file_ctx *fctx, uint32_t *in_cp_nr, uint32_t *in_units_nr, struct m0_cm_proxy_in_count *pcount)
M0_INTERNAL uint64_t agid2group(const struct m0_cm_ag_id *id)
static struct m0_sns_cm_ag * sag
M0_INTERNAL bool m0_sns_cm_is_cob_repairing(struct m0_poolmach *pm, uint32_t cob_index)
M0_INTERNAL bool m0_sns_cm_is_cob_rebalancing(struct m0_poolmach *pm, uint32_t cob_index)
return M0_ERR(-EOPNOTSUPP)
struct m0_layout_enum lle_base
M0_INTERNAL uint32_t m0_sns_cm_device_index_get(uint64_t group, uint64_t unit_number, struct m0_sns_cm_file_ctx *fctx)
struct m0_sns_cm * sf_scm
M0_INTERNAL struct m0_confc * m0_reqh2confc(struct m0_reqh *reqh)
M0_INTERNAL size_t m0_sns_cm_ag_unrepaired_units(const struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, uint64_t group, struct m0_bitmap *fmap_out)
static struct m0_cob * cob
M0_INTERNAL uint32_t m0_pdclust_N(const struct m0_pdclust_layout *pl)
static struct m0_confc * confc
M0_INTERNAL int m0_sns_cm_cob_locate(struct m0_cob_domain *cdom, const struct m0_fid *cob_fid)
M0_INTERNAL void m0_cob_oikey_make(struct m0_cob_oikey *oikey, const struct m0_fid *fid, int linkno)
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_local_units(struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, uint64_t group)
m0_sns_cm_local_unit_type
M0_INTERNAL uint32_t m0_pdclust_S(const struct m0_pdclust_layout *pl)
static struct m0_fid cob_fid
M0_INTERNAL struct m0_pdclust_layout * m0_layout_to_pdl(const struct m0_layout *l)
M0_INTERNAL uint32_t m0_fid_cob_device_id(const struct m0_fid *cob_fid)
bool(* sch_ag_is_relevant)(struct m0_sns_cm *scm, struct m0_sns_cm_file_ctx *fctx, uint64_t group)
struct m0_pdclust_instance pi
M0_INTERNAL uint32_t m0_pdclust_K(const struct m0_pdclust_layout *pl)
M0_INTERNAL bool m0_sns_cm_is_cob_repaired(struct m0_poolmach *pm, uint32_t cob_index)
M0_INTERNAL bool m0_poolmach_device_is_in_spare_usage_array(struct m0_poolmach *pm, uint32_t device_index)
struct m0_pools_common * pv_pc
M0_INTERNAL uint64_t m0_sns_cm_ag_spare_unit_nr(const struct m0_pdclust_layout *pl, uint64_t fidx)
M0_INTERNAL void m0_bitmap_set(struct m0_bitmap *map, size_t idx, bool val)
struct m0_layout_domain rh_ldom
M0_INTERNAL int m0_sns_repair_data_map(struct m0_poolmach *pm, struct m0_pdclust_layout *pl, struct m0_pdclust_instance *pi, uint64_t group_number, uint64_t spare_unit_number, uint64_t *data_unit_id_out)
uint64_t(* sch_ag_unit_end)(const struct m0_pdclust_layout *pl)
M0_INTERNAL void m0_sns_cm_fctx_lock(struct m0_sns_cm_file_ctx *fctx)
struct m0_pool_device_to_service * pc_dev2svc
M0_INTERNAL int m0_sns_cm_ag_in_cp_units(const struct m0_sns_cm *scm, const struct m0_cm_ag_id *id, struct m0_sns_cm_file_ctx *fctx, uint32_t *in_cp_nr, uint32_t *in_units_nr, struct m0_cm_proxy_in_count *pcount)
struct m0_cob_domain * sc_cob_dom
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_spare_units(const struct m0_pdclust_layout *pl)
M0_INTERNAL struct m0_reqh * m0_sns_cm2reqh(const struct m0_sns_cm *snscm)
struct m0_uint128 pa_seed
static struct m0_pool pool
M0_INTERNAL struct m0_layout * m0_pdl_to_layout(struct m0_pdclust_layout *pl)
M0_INTERNAL enum m0_sns_cm_local_unit_type m0_sns_cm_local_unit_type_get(struct m0_sns_cm_file_ctx *fctx, uint64_t group, uint64_t unit)
struct m0_reqh_service_ctx * pds_ctx
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
static struct m0_conf_service * cm_conf_service_get(const struct m0_cm *cm, const struct m0_pool_version *pv, const struct m0_fid *cob_fid)
struct m0_sns_cm_file_ctx * sag_fctx
M0_INTERNAL bool m0_sns_cm_group_has_local_presence(struct m0_sns_cm_file_ctx *fctx, uint32_t units_per_group, uint64_t group)
#define M0_FI_ENABLED(tag)
M0_INTERNAL const struct m0_fid M0_MDSERVICE_START_FID
M0_INTERNAL uint64_t m0_sns_cm_ag_size(const struct m0_pdclust_layout *pl)
M0_INTERNAL int m0_sns_cm_pool_ha_nvec_alloc(struct m0_pool *pool, enum m0_pool_nd_state state, struct m0_ha_nvec *nvec)
static const char * local_ep(const struct m0_cm *cm)
struct m0_reqh_service cm_service
static struct m0_net_test_service svc
M0_INTERNAL enum m0_pdclust_unit_type m0_pdclust_unit_classify(const struct m0_pdclust_layout *pl, int unit)
static int start(struct m0_fom *fom)
struct m0_pools_common * rh_pools
M0_INTERNAL int m0_pdclust_build(struct m0_layout_domain *dom, uint64_t lid, const struct m0_pdclust_attr *attr, struct m0_layout_enum *le, struct m0_pdclust_layout **out)
M0_INTERNAL bool m0_sns_cm_unit_is_spare(struct m0_sns_cm_file_ctx *fctx, uint64_t group_nr, uint64_t spare_nr)
M0_INTERNAL int m0_cob_locate(struct m0_cob_domain *dom, struct m0_cob_oikey *oikey, uint64_t flags, struct m0_cob **out)
M0_INTERNAL void m0_confc_close(struct m0_conf_obj *obj)
struct m0_cob_attr sf_attr
struct m0_pdclust_instance * sf_pi
static struct m0_sns_cm_file_ctx fctx
struct m0_cm_aggr_group sag_base
struct m0_ha_note * nv_note
M0_INTERNAL const struct m0_fid * m0_cob_fid(const struct m0_cob *cob)
M0_INTERNAL bool m0_fid_is_valid(const struct m0_fid *fid)
M0_INTERNAL bool m0_cm_is_locked(const struct m0_cm *cm)
#define m0_tl_for(name, head, obj)
bool(* sch_is_cob_failed)(struct m0_poolmach *pm, uint32_t cob_index)
const struct m0_sns_cm_helpers * sc_helpers
M0_INTERNAL int m0_sns_cm_ut_file_size_layout(struct m0_sns_cm_file_ctx *fctx)
M0_INTERNAL bool m0_sns_cm_disk_has_dirty_pver(struct m0_cm *cm, struct m0_conf_drive *disk, bool clear)
M0_INTERNAL void m0_poolmach_gob2cob(struct m0_poolmach *pm, const struct m0_fid *gfid, uint32_t idx, struct m0_fid *cob_fid)
M0_INTERNAL uint64_t m0_pdclust_unit_size(const struct m0_pdclust_layout *pl)
M0_INTERNAL uint64_t m0_hash(uint64_t x)
struct m0_tl po_failed_devices