23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_SNSCM 44 #define _AST2FCTX(ast, field) \ 45 container_of(ast, struct m0_sns_cm_file_ctx, field) 89 .sd_name =
"file ctx init",
94 .sd_name =
"file lock wait",
99 .sd_name =
"file locked",
106 .sd_name =
"file attr fetch",
111 .sd_name =
"file attr fetched",
116 .sd_name =
"file layout fetch",
121 .sd_name =
"file ctx layout fetched",
126 .sd_name =
"file ctx fini",
270 m0_scmfctx_tlink_init(
fctx);
289 m0_scmfctx_tlink_fini(
fctx);
333 return M0_RC(-EAGAIN);
390 "Failed to lock file "FID_F,
401 return M0_RC(-EAGAIN);
428 return M0_RC(-EAGAIN);
534 if (max_cob_size < frame_size)
537 frame = max_cob_size % frame_size ?
538 max_cob_size / frame_size + 1 :
539 max_cob_size / frame_size;
613 rc =
rc == -ENOMEM ?
rc : -EAGAIN;
647 return M0_RC(-ENOENT);
771 uint64_t nr_total_du = 0;
787 uint64_t nr_max_data_units,
788 uint64_t
group, uint32_t unit)
796 return (
group * d + unit + 1) > nr_max_data_units;
805 #undef M0_TRACE_SUBSYSTEM M0_INTERNAL struct m0_layout * m0_layout_find(struct m0_layout_domain *dom, uint64_t lid)
M0_INTERNAL uint64_t m0_sns_cm_ag_nr_data_units(const struct m0_pdclust_layout *pl)
struct m0_sm_ast sf_attr_ast
static void __fctx_ast_post(struct m0_sns_cm_file_ctx *fctx, struct m0_sm_ast *ast)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
enum m0_rm_remote_state rem_state
M0_INTERNAL bool m0_sns_cm_fid_is_valid(const struct m0_sns_cm *snscm, const struct m0_fid *fid)
#define m0_htable_for(name, var, htable)
static void __sns_cm_fctx_cleanup(struct m0_sns_cm_file_ctx *fctx)
struct m0_rm_resource_type rc_rt
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
struct m0_htable sc_file_ctx
M0_INTERNAL void m0_clink_del_lock(struct m0_clink *link)
void(* sa_cb)(struct m0_sm_group *grp, struct m0_sm_ast *)
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)
static struct m0_sm_group * grp
struct m0_pool_version * pv
struct m0_poolmach pv_mach
#define M0_LOG(level,...)
static struct m0_sm_state_descr fctx_sd[M0_SCFS_NR]
M0_INTERNAL void m0_sm_ast_post(struct m0_sm_group *grp, struct m0_sm_ast *ast)
M0_INTERNAL uint64_t m0_sns_cm_file_data_units(struct m0_sns_cm_file_ctx *fctx)
static int __sns_cm_file_lock(struct m0_sns_cm_file_ctx *fctx)
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)
struct m0_layout_instance pi_base
M0_INTERNAL bool m0_sns_cm_file_unit_is_EOF(struct m0_pdclust_layout *pl, uint64_t nr_max_data_units, uint64_t group, uint32_t unit)
static void sns_cm_fctx_rm_init(struct m0_sns_cm_file_ctx *fctx)
static uint64_t max_frame(const struct m0_sns_cm_file_ctx *fctx, size_t max_cob_size)
struct m0_layout * sf_layout
uint64_t sf_nr_ios_visited
M0_INTERNAL void m0_sns_cm_fctx_unlock(struct m0_sns_cm_file_ctx *fctx)
static struct m0_sns_cm * scm
M0_INTERNAL int m0_ios_cob_getattr_async(const struct m0_fid *gfid, struct m0_cob_attr *attr, uint64_t cob_idx, struct m0_pool_version *pv, void(*cb)(void *arg, int rc), void *arg)
M0_HT_DESCR_DEFINE(tioreqht, "Hash of target_ioreq objects", static, struct target_ioreq, ti_link, ti_magic, M0_T1FS_TIOREQ_MAGIC, M0_T1FS_TLIST_HEAD_MAGIC, ti_fid.f_container, tioreqs_hash_func, tioreq_key_eq)
M0_INTERNAL void m0_fom_wait_on(struct m0_fom *fom, struct m0_chan *chan, struct m0_fom_callback *cb)
M0_INTERNAL void m0_rm_remote_init(struct m0_rm_remote *rem, struct m0_rm_resource *res)
M0_INTERNAL int m0_sns_cm_file_lock(struct m0_sns_cm *scm, const struct m0_fid *fid, struct m0_sns_cm_file_ctx **out)
M0_INTERNAL void m0_sns_cm_fctx_fini(struct m0_sns_cm_file_ctx *fctx)
#define container_of(ptr, type, member)
struct m0_rm_credit rin_want
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
struct m0_rpc_session * rem_session
struct m0_poolmach * sf_pm
M0_INTERNAL int m0_sns_cm_fctx_init(struct m0_sns_cm *scm, const struct m0_fid *fid, struct m0_sns_cm_file_ctx **sc_fctx)
M0_INTERNAL int m0_fid_cmp(const struct m0_fid *fid0, const struct m0_fid *fid1)
static int _layout_fetch(struct m0_sns_cm_file_ctx *fctx)
M0_INTERNAL void m0_sns_cm_file_attr_and_layout_wait(struct m0_sns_cm_file_ctx *fctx, struct m0_fom *fom)
struct m0_pdclust_attr pl_attr
M0_INTERNAL int m0_layout_instance_build(struct m0_layout *l, const struct m0_fid *fid, struct m0_layout_instance **out)
struct m0_pooldev * sf_pd
static struct m0_sm_ast ast[NR]
M0_INTERNAL struct m0_sns_cm_file_ctx * m0_sns_cm_fctx_get(struct m0_sns_cm *scm, const struct m0_cm_ag_id *id)
static void _attr_cb(void *arg, int rc)
M0_INTERNAL void m0_ref_put(struct m0_ref *ref)
M0_INTERNAL void m0_fid_set(struct m0_fid *fid, uint64_t container, uint64_t key)
#define M0_ERR_INFO(rc, fmt,...)
void m0_ref_init(struct m0_ref *ref, int init_num, void(*release)(struct m0_ref *ref))
return M0_ERR(-EOPNOTSUPP)
static void _fctx_fini(struct m0_sm_group *grp, struct m0_sm_ast *ast)
M0_INTERNAL void m0_ref_get(struct m0_ref *ref)
struct m0_mutex sc_file_ctx_mutex
struct m0_sns_cm * sf_scm
M0_INTERNAL const struct m0_fid M0_MDSERVICE_SLASH_FID
M0_INTERNAL void m0_sns_cm_file_bwd_map(struct m0_sns_cm_file_ctx *fctx, const struct m0_pdclust_tgt_addr *ta, struct m0_pdclust_src_addr *sa)
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 uint64_t m0_pool_version2layout_id(const struct m0_fid *pv_fid, uint64_t lid)
M0_INTERNAL int m0_sns_cm_file_lock_wait(struct m0_sns_cm_file_ctx *fctx, struct m0_fom *fom)
struct m0_rm_remote sf_creditor
#define M0_AMB(obj, ptr, field)
static void _fctx_status_set(struct m0_sns_cm_file_ctx *fctx, int state)
M0_INTERNAL void m0_sns_cm_file_unlock(struct m0_sns_cm *scm, struct m0_fid *fid)
#define _AST2FCTX(ast, field)
M0_INTERNAL struct m0_pool_version * m0_sns_cm_pool_version_get(struct m0_sns_cm_file_ctx *fctx)
M0_INTERNAL bool m0_mutex_is_locked(const struct m0_mutex *mutex)
static void __sns_cm_file_unlock(struct m0_sns_cm_file_ctx *fctx)
static void _max_group_set(struct m0_sns_cm_file_ctx *fctx)
void m0_sm_state_set(struct m0_sm *mach, int state)
static int _fid_layout_instance(struct m0_sns_cm_file_ctx *fctx)
static int __sns_cm_file_oo_lock(struct m0_sns_cm_file_ctx *fctx)
const struct m0_rm_incoming_ops * rin_ops
struct m0_clink sf_fini_clink
struct m0_sm_ast sf_fini_ast
M0_INTERNAL void m0_file_owner_init(struct m0_rm_owner *owner, const struct m0_uint128 *grp_id, struct m0_file *file, struct m0_rm_remote *creditor)
M0_INTERNAL struct m0_pdclust_layout * m0_layout_to_pdl(const struct m0_layout *l)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
const struct m0_rm_incoming_ops file_lock_incoming_ops
struct m0_layout_domain rh_ldom
M0_INTERNAL void m0_fd_bwd_map(struct m0_pdclust_instance *pi, const struct m0_pdclust_tgt_addr *tgt, struct m0_pdclust_src_addr *src)
M0_INTERNAL void m0_sns_cm_fctx_lock(struct m0_sns_cm_file_ctx *fctx)
const struct m0_uint128 m0_rm_sns_cm_group
static struct m0_clink l[NR]
static void sns_cm_fctx_rm_fini(struct m0_sns_cm_file_ctx *fctx)
static const struct m0_sm_conf fctx_sm_conf
M0_INTERNAL struct m0_reqh * m0_sns_cm2reqh(const struct m0_sns_cm *snscm)
static struct m0_pool pool
struct m0_sm_group cm_sm_group
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
M0_INTERNAL void m0_sns_cm_fctx_cleanup(struct m0_sns_cm *scm)
M0_INTERNAL void m0_file_unlock(struct m0_rm_incoming *req)
struct m0_sm_group * sf_group
#define M0_FI_ENABLED(tag)
M0_INTERNAL void m0_rm_remote_fini(struct m0_rm_remote *rem)
M0_INTERNAL void m0_sm_init(struct m0_sm *mach, const struct m0_sm_conf *conf, uint32_t state, struct m0_sm_group *grp)
static int _attr_fetch(struct m0_sns_cm_file_ctx *fctx)
#define M0_ALLOC_PTR(ptr)
M0_INTERNAL void m0_clink_add(struct m0_chan *chan, struct m0_clink *link)
struct m0_rm_resource fi_res
struct m0_reqh_service cm_service
struct m0_rm_incoming sf_rin
M0_INTERNAL void m0_rm_owner_windup(struct m0_rm_owner *owner)
M0_INTERNAL enum m0_pdclust_unit_type m0_pdclust_unit_classify(const struct m0_pdclust_layout *pl, int unit)
M0_INTERNAL int m0_sns_cm_file_attr_and_layout(struct m0_sns_cm_file_ctx *fctx)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
struct m0_pools_common * rh_pools
M0_INTERNAL struct m0_sns_cm_file_ctx * m0_sns_cm_fctx_locate(struct m0_sns_cm *scm, struct m0_fid *fid)
M0_INTERNAL int m0_sns_cm_fctx_state_get(struct m0_sns_cm_file_ctx *fctx)
const struct m0_rm_resource_type_ops * rt_ops
M0_INTERNAL void m0_rm_owner_unlock(struct m0_rm_owner *owner)
struct m0_sns_cm_rm_ctx sc_rm_ctx
#define M0_UINT128(hi, lo)
static uint64_t sns_cm_fctx_hash_func(const struct m0_htable *htable, const void *k)
static void _attr_ast_cb(struct m0_sm_group *grp, struct m0_sm_ast *ast)
M0_INTERNAL void m0_file_fini(struct m0_file *file)
M0_INTERNAL struct m0_rpc_session * m0_pools_common_active_rm_session(struct m0_pools_common *pc)
struct m0_cob_attr sf_attr
M0_INTERNAL void m0_layout_instance_fini(struct m0_layout_instance *li)
struct m0_pdclust_instance * sf_pi
static struct m0_sns_cm_file_ctx fctx
M0_INTERNAL struct m0_pdclust_instance * m0_layout_instance_to_pdi(const struct m0_layout_instance *li)
M0_INTERNAL void m0_layout_put(struct m0_layout *l)
M0_INTERNAL void m0_rm_owner_lock(struct m0_rm_owner *owner)
struct m0_uint128 cr_group_id
M0_INTERNAL void m0_file_owner_fini(struct m0_rm_owner *owner)
M0_INTERNAL void m0_fd_fwd_map(struct m0_pdclust_instance *pi, const struct m0_pdclust_src_addr *src, struct m0_pdclust_tgt_addr *tgt)
static bool sns_cm_fctx_key_eq(const void *key1, const void *key2)
M0_INTERNAL bool m0_cm_is_locked(const struct m0_cm *cm)
struct m0_rm_owner sf_owner
static int _ios_failed_cob_attr(struct m0_sns_cm_file_ctx *fctx)
static struct m0_poolmach * sns_cm_poolmach_get(struct m0_sns_cm_file_ctx *fctx)
const struct m0_rm_resource_type_ops file_lock_type_ops
M0_INTERNAL int m0_sns_cm_ut_file_size_layout(struct m0_sns_cm_file_ctx *fctx)
M0_HT_DEFINE(tioreqht, static, struct target_ioreq, uint64_t)
M0_INTERNAL void m0_sns_cm_fctx_put(struct m0_sns_cm *scm, const struct m0_cm_ag_id *id)
M0_INTERNAL void m0_rm_credit_get(struct m0_rm_incoming *in)
M0_INTERNAL uint64_t m0_pdclust_unit_size(const struct m0_pdclust_layout *pl)
M0_INTERNAL const struct m0_fid M0_COB_ROOT_FID
struct m0_rm_resource * ro_resource
M0_INTERNAL void m0_file_init(struct m0_file *file, const struct m0_fid *fid, struct m0_rm_domain *dom, enum m0_di_types di_type)
static void sns_cm_fctx_release(struct m0_ref *ref)
M0_INTERNAL void m0_sns_cm_flock_resource_set(struct m0_sns_cm *scm)
M0_INTERNAL void m0_sm_fini(struct m0_sm *mach)
struct m0_tl po_failed_devices
static bool fctx_fini_clink_cb(struct m0_clink *link)