22 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_M0T1FS 25 #include <linux/kernel.h> 26 #include <linux/mount.h> 27 #include <linux/parser.h> 28 #include <linux/slab.h> 29 #include <linux/statfs.h> 65 #define M0T1FS_NAME_LEN 256 69 "e.g. 172.18.50.40@o2ib1:12345:34:\n" 70 "the tmid will be generated and filled by every mount");
94 .drop_inode = generic_delete_inode,
100 ci_sb_linkage, ci_magic,
103 M0_TL_DEFINE(csb_inodes, M0_INTERNAL,
struct m0t1fs_inode);
150 pc = &
csb->csb_pools_common;
158 return &
ctx->sc_rlink.rlk_sess;
167 uint64_t container_id)
172 M0_PRE(container_id < pver->pv_pc->pc_nr_devices);
176 ctx =
pver->pv_pc->pc_dev2svc[container_id].pds_ctx;
180 &
ctx->sc_rlink.rlk_sess);
182 return &
ctx->sc_rlink.rlk_sess;
187 struct m0_spiel_core spc = {
189 .spc_rmachine = &
csb->csb_rpc_machine,
200 struct m0t1fs_sb *
csb = M0T1FS_SB(
dentry->d_sb);
222 buf->f_blocks =
stats.fs_total_disk /
buf->f_bsize;
226 buf->f_files =
stats.fs_total_seg / 512;
227 buf->f_ffree =
stats.fs_free_seg / 512;
229 buf->f_bavail =
stats.fs_avail_disk /
buf->f_bsize;
299 s = match_strdup(
src);
303 rc = kstrtoul(
s, 10, &
n);
317 return s ==
NULL || *
s ==
'\0';
324 "Mandatory parameter is missing: ha");
327 "Mandatory parameter is missing: profile");
330 "Mandatory parameter is missing: pfid");
334 "fid_start must be greater than %llu",
342 substring_t
args[MAX_OPT_ARGS];
349 return M0_RC(-EINVAL);
384 (
unsigned long)
dest->mo_fid_start);
395 csb->csb_oostore =
true;
399 csb->csb_verify =
true;
431 csb->csb_active =
true;
434 csb->csb_oostore =
false;
435 csb->csb_verify =
false;
436 csb->csb_reqs_nr = 0;
440 csb_inodes_tlist_init(&
csb->csb_inodes);
450 csb_inodes_tlist_fini(&
csb->csb_inodes);
456 csb->csb_next_key = 0;
469 csb->csb_motr_ha.mh_link,
470 &
csb->csb_process_fid, 0,
487 .hdc_enable_keepalive =
true,
488 .hdc_enable_fvec =
true,
491 .mhc_rpc_machine = &
csb->csb_rpc_machine,
492 .mhc_reqh = &
csb->csb_reqh,
493 .mhc_process_fid =
csb->csb_process_fid,
583 return M0_RC(-ENOMEM);
587 if (
csb->csb_tmid == ((
size_t)-1)) {
590 return M0_RC(-EMFILE);
598 csb->csb_laddr = laddr;
601 ndom = &
csb->csb_ndom;
610 csb->csb_tmid,
false);
646 &
csb->csb_ut_be, 1ULL << 24);
657 .rhia_dtm = (
void*)1,
658 .rhia_db =
csb->csb_ut_seg.bus_seg,
659 .rhia_mdstore = (
void*)1,
660 .rhia_pc = &
csb->csb_pools_common,
661 .rhia_fid = &
csb->csb_process_fid);
695 return &
csb->csb_reqh.rh_rconfc;
730 if (M0_IN(
csb->csb_confc_state.cus_state,
753 if (
csb->csb_reqs_nr == 0 &&
767 if (
csb->csb_reqh.rh_rconfc.rc_stopping)
785 for (
i = 0;
i <
csb->csb_pools_common.pc_nr_devices;
i++) {
786 ctx =
csb->csb_pools_common.pc_dev2svc[
i].pds_ctx;
788 &&
ctx->sc_rlink.rlk_connected)
798 struct m0t1fs_inode *
ci;
808 if (
ci->ci_layout_instance !=
NULL) {
810 ci->ci_layout_instance =
NULL;
824 if (
csb->csb_reqs_nr == 0 &&
835 struct m0_clink *pc_clink = &
csb->csb_pools_common.pc_conf_ready_async;
840 &
csb->csb_confc_state);
846 if (
csb->csb_pools_common.pc_confc !=
NULL)
947 .ca_rmach = &
csb->csb_rpc_machine,
968 &
csb->csb_conf_ready_async);
972 goto err_rconfc_stop;
975 goto err_rconfc_stop;
979 goto err_conf_fs_close;
982 goto err_conf_fs_close;
986 goto err_conf_fs_close;
991 goto err_pools_common_fini;
995 goto err_pools_destroy;
1000 goto err_pools_service_ctx_destroy;
1004 if (!M0_IN(
rc, (0, -ENOENT)))
1005 goto err_pool_versions_destroy;
1009 goto err_pool_versions_destroy;
1013 goto err_rm_service_quit;
1025 err_rm_service_quit:
1027 err_pool_versions_destroy:
1030 err_pools_service_ctx_destroy:
1034 err_pools_common_fini:
1094 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) 1095 clear_nlink(
dentry->d_inode);
1097 dentry->d_inode->i_nlink = 0;
1108 if (
csb->csb_fid_dentry !=
NULL) {
1112 if (
csb->csb_motr_dentry !=
NULL) {
1137 body->
b_mode = (S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR |
1146 struct inode *motr_inode;
1147 struct dentry *motr_dentry;
1148 struct inode *fid_inode;
1149 struct dentry *fid_dentry;
1150 struct m0t1fs_sb *
csb = M0T1FS_SB(
sb);
1162 if (motr_dentry ==
NULL)
1163 return M0_RC(-ENOMEM);
1168 if (IS_ERR(motr_inode)) {
1171 (
int)PTR_ERR(motr_inode));
1172 return M0_RC((
int)PTR_ERR(motr_inode));
1177 if (fid_dentry ==
NULL) {
1181 "failed, rc=%d", -ENOMEM);
1182 return M0_RC(-ENOMEM);
1188 if (IS_ERR(fid_inode)) {
1193 "failed, rc=%d", (
int)PTR_ERR(fid_inode));
1194 return M0_RC((
int)PTR_ERR(fid_inode));
1197 d_add(motr_dentry, motr_inode);
1198 csb->csb_motr_dentry = motr_dentry;
1200 d_add(fid_dentry, fid_inode);
1201 csb->csb_fid_dentry = fid_dentry;
1208 struct m0t1fs_mdop
mo;
1214 mo.mo_attr.ca_name.b_addr,
1215 mo.mo_attr.ca_name.b_nob,
1224 struct inode *root_inode;
1226 struct m0t1fs_sb *
csb = M0T1FS_SB(
sb);
1233 if (!
csb->csb_oostore) {
1239 sb->s_magic =
rep->f_type;
1240 csb->csb_namelen =
rep->f_namelen;
1251 if (IS_ERR(root_inode)) {
1252 rc = (
int)PTR_ERR(root_inode);
1255 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) 1256 sb->s_root = d_make_root(root_inode);
1258 sb->s_root = d_alloc_root(root_inode);
1260 if (
sb->s_root ==
NULL) {
1274 struct m0t1fs_sb *
csb;
1294 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) 1295 rc = bdi_init(&
csb->csb_backing_dev_info);
1309 sb->s_fs_info =
csb;
1311 sb->s_blocksize_bits = PAGE_SHIFT;
1312 sb->s_maxbytes = MAX_LFS_FILESIZE;
1314 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) 1317 rc = bdi_register_dev(&
csb->csb_backing_dev_info,
sb->s_dev);
1322 sb->s_bdi = &
csb->csb_backing_dev_info;
1325 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,9,0) 1354 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) 1356 bdi_unregister(
sb->s_bdi);
1371 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) 1373 int flags,
const char *devname,
1376 M0_INTERNAL
int m0t1fs_get_sb(
struct file_system_type *fstype,
int flags,
1377 const char *devname,
void *
data,
1378 struct vfsmount *mnt)
1382 M0_ENTRY(
"flags: 0x%x, devname: %s, data: %s",
flags, devname,
1384 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) 1394 struct m0t1fs_sb *
csb = M0T1FS_SB(
sb);
1402 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) 1404 bdi_unregister(
sb->s_bdi);
1414 kill_anon_super(
sb);
1425 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) 1426 bdi_destroy(&
csb->csb_backing_dev_info);
1431 M0_LOG(
M0_INFO,
"mem stats :\n a_ioreq_nr = %llu, d_ioreq_nr = %llu\n" 1432 "a_pargrp_iomap_nr = %llu, d_pargrp_iomap_nr = %llu\n" 1433 "a_target_ioreq_nr = %llu, d_target_ioreq_nr = %llu\n",
1438 M0_LOG(
M0_INFO,
"a_io_req_fop_nr = %llu, d_io_req_fop_nr = %llu\n" 1439 "a_data_buf_nr = %llu, d_data_buf_nr = %llu\n" 1440 "a_page_nr = %llu, d_page_nr = %llu\n",
1460 if (!
csb->csb_active &&
1475 csb->csb_active =
false;
1484 #undef M0_TRACE_SUBSYSTEM M0_INTERNAL struct inode * m0t1fs_iget(struct super_block *sb, const struct m0_fid *fid, struct m0_fop_cob *body)
M0_INTERNAL int m0_spiel__fs_stats_fetch(struct m0_spiel_core *spc, struct m0_fs_stats *stats)
static int str_parse(char **dest, const substring_t *src)
M0_INTERNAL void m0_reqh_service_cancel_reconnect(struct m0_reqh_service_ctx *ctx)
void m0_be_ut_seg_fini(struct m0_be_ut_seg *ut_seg)
M0_INTERNAL void m0_chan_wait(struct m0_clink *link)
M0_INTERNAL void m0_pools_common_fini(struct m0_pools_common *pc)
void m0_rpc_machine_fini(struct m0_rpc_machine *machine)
static bool m0t1fs_conf_ready_cb(struct m0_clink *clink)
M0_INTERNAL void m0_reqh_services_terminate(struct m0_reqh *reqh)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
void m0_net_domain_fini(struct m0_net_domain *dom)
M0_INTERNAL void m0_chan_broadcast_lock(struct m0_chan *chan)
M0_INTERNAL const struct m0_fid M0_ROOT_FID
void m0_addb2_sys_net_stop(struct m0_addb2_sys *sys)
M0_INTERNAL int m0_motr_ha_start(struct m0_motr_ha *mha)
int const char const void size_t int flags
static bool is_empty(const char *s)
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)
int m0_thread_join(struct m0_thread *q)
M0_INTERNAL int m0_conf_full_load(struct m0_conf_root *r)
M0_INTERNAL const char M0_DOT_MOTR_FID_NAME[]
M0_INTERNAL int m0t1fs_fill_cob_attr(struct m0_fop_cob *body)
#define M0_REQH_INIT(reqh,...)
M0_INTERNAL void m0_uuid_generate(struct m0_uint128 *u)
M0_INTERNAL struct m0_pool_version * m0_pool_version_find(struct m0_pools_common *pc, const struct m0_fid *id)
struct m0_chan rh_conf_cache_ready_async
static void m0t1fs_dput(struct dentry *dentry)
struct m0_conf_obj rt_obj
struct m0_pool_version * pv
static struct m0_motr_ha_cfg motr_ha_cfg
#define M0_LOG(level,...)
M0_INTERNAL void m0_reqh_layouts_cleanup(struct m0_reqh *reqh)
static int addb2_net_disable
const struct m0_conf_obj_type M0_CONF_SERVICE_TYPE
struct m0hsm_options options
int m0t1fs_ha_init(struct m0t1fs_sb *csb, const char *ha_addr)
struct m0_bitmap m0t1fs_client_ep_tmid
static int mount_opts_validate(const struct mount_opts *mops)
M0_INTERNAL void m0t1fs_destroy_inode(struct inode *inode)
M0_TL_DEFINE(csb_inodes, M0_INTERNAL, struct m0t1fs_inode)
M0_INTERNAL struct m0_rconfc * m0_csb2rconfc(struct m0t1fs_sb *csb)
M0_INTERNAL struct m0_rpc_session * m0t1fs_filename_to_mds_session(const struct m0t1fs_sb *csb, const unsigned char *filename, unsigned int nlen, bool use_hint, uint32_t hash_hint)
void m0t1fs_rpc_fini(struct m0t1fs_sb *csb)
static void service_connect_wait(struct m0t1fs_sb *csb)
M0_INTERNAL void m0_rconfc_stop_sync(struct m0_rconfc *rconfc)
struct m0_chan rh_conf_cache_ready
static void ast_thread(struct m0t1fs_sb *csb)
void * m0_fop_data(const struct m0_fop *fop)
enum m0_md_lustre_logrec_type __attribute__
M0_INTERNAL void m0_rconfc_fatal_cb_set(struct m0_rconfc *rconfc, m0_rconfc_cb_t cb)
M0_INTERNAL const struct m0_fid M0_DOT_MOTR_FID_FID
void m0_be_ut_seg_init(struct m0_be_ut_seg *ut_seg, struct m0_be_ut_backend *ut_be, m0_bcount_t size)
#define M0_THREAD_INIT(thread, TYPE, init, func, arg, namefmt,...)
static int m0t1fs_obf_alloc(struct super_block *sb)
M0_INTERNAL struct m0 * m0_get(void)
static bool m0t1fs_conf_expired_cb(struct m0_clink *clink)
MODULE_PARM_DESC(local_addr, "End-point address of m0t1fs " "e.g. 172.18.50.40@o2ib1:12345:34:\ "the tmid will be generated and filled by every mount")
#define container_of(ptr, type, member)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
M0_INTERNAL void m0t1fs_sb_init(struct m0t1fs_sb *csb)
M0_INTERNAL struct dentry * m0t1fs_mount(struct file_system_type *fstype, int flags, const char *devname, void *data)
M0_INTERNAL int m0_pools_setup(struct m0_pools_common *pc, const struct m0_fid *profile, struct m0_sm_group *sm_grp, struct m0_dtm *dtm)
static int mount_opts_parse(struct m0t1fs_sb *csb, char *options, struct mount_opts *dest)
M0_INTERNAL void m0_reqh_service_connect_wait(struct m0_reqh_service_ctx *ctx)
M0_INTERNAL void m0_reqh_fini(struct m0_reqh *reqh)
M0_INTERNAL int m0_motr_ha_init(struct m0_motr_ha *mha, struct m0_motr_ha_cfg *mha_cfg)
module_param(local_addr, charp, S_IRUGO)
struct m0_fop_getxattr_rep * rep
M0_INTERNAL void m0_sm_group_fini(struct m0_sm_group *grp)
static struct m0_pools_common pc
uint64_t pc_nr_svcs[M0_CST_NR]
M0_INTERNAL void m0_motr_ha_disconnect(struct m0_motr_ha *mha)
M0_INTERNAL int m0_confc_root_open(struct m0_confc *confc, struct m0_conf_root **root)
static void m0t1fs_teardown(struct m0t1fs_sb *csb)
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
M0_INTERNAL struct m0_fid * m0_reqh2profile(struct m0_reqh *reqh)
M0_INTERNAL void m0t1fs_sb_fini(struct m0t1fs_sb *csb)
static const match_table_t m0t1fs_mntopt_tokens
void m0_fop_put0_lock(struct m0_fop *fop)
M0_INTERNAL struct m0_confc * m0_csb2confc(struct m0t1fs_sb *csb)
M0_INTERNAL void m0t1fs_fs_unlock(struct m0t1fs_sb *csb)
#define M0_ERR_INFO(rc, fmt,...)
struct m0_reqh_service_ctx ** pc_mds_map
struct m0_conf_root * root
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL bool m0_pools_common_conf_ready_async_cb(struct m0_clink *clink)
M0_INTERNAL void m0_pool_versions_stale_mark(struct m0_pools_common *pc, struct m0_confc_update_state *s)
uint32_t pc_md_redundancy
M0_INTERNAL const char M0_DOT_MOTR_NAME[]
M0_INTERNAL int m0_pool_version_get(struct m0_pools_common *pc, const struct m0_fid *pool, struct m0_pool_version **pv)
M0_INTERNAL struct m0_confc * m0_reqh2confc(struct m0_reqh *reqh)
#define M0_FID_TINIT(type, container, key)
#define M0_AMB(obj, ptr, field)
static void m0t1fs_sb_layouts_fini(struct m0t1fs_sb *csb)
const struct m0_fid_type cot_ftype
M0_INTERNAL int m0_reqh_conf_setup(struct m0_reqh *reqh, struct m0_confc_args *args)
struct m0_net_transfer_mc rm_tm
M0_INTERNAL void m0_chan_init(struct m0_chan *chan, struct m0_mutex *ch_guard)
bool i_disable_addb2_storage
M0_INTERNAL void m0t1fs_fs_conf_unlock(struct m0t1fs_sb *csb)
M0_INTERNAL void m0_reqh_service_quit(struct m0_reqh_service *svc)
M0_INTERNAL bool m0_mutex_is_locked(const struct m0_mutex *mutex)
M0_INTERNAL void m0_sm_group_init(struct m0_sm_group *grp)
static int struct dentry * dentry
M0_INTERNAL void m0_pools_common_service_ctx_connect_sync(struct m0_pools_common *pc)
m0_time_t m0_time_now(void)
M0_INTERNAL int m0_rpc_net_buffer_pool_setup(struct m0_net_domain *ndom, struct m0_net_buffer_pool *app_pool, uint32_t bufs_nr, uint32_t tm_nr)
static struct m0t1fs_sb * rconfc2csb(struct m0_rconfc *rconfc)
M0_INTERNAL int m0t1fs_ref_get_lock(struct m0t1fs_sb *csb)
M0_INTERNAL uint32_t m0_rpc_bufs_nr(uint32_t len, uint32_t tms_nr)
static int m0t1fs_root_alloc(struct super_block *sb)
static void ast_thread_stop(struct m0t1fs_sb *csb)
M0_INTERNAL int m0_bitmap_ffz(const struct m0_bitmap *map)
static void m0t1fs_rconfc_fatal_cb(struct m0_rconfc *rconfc)
M0_INTERNAL int m0_rpc_machine_init(struct m0_rpc_machine *machine, struct m0_net_domain *net_dom, const char *ep_addr, struct m0_reqh *reqh, struct m0_net_buffer_pool *receive_pool, uint32_t colour, m0_bcount_t msg_size, uint32_t queue_len)
struct m0_net_xprt * m0_net_xprt_default_get(void)
M0_INTERNAL void m0_pools_service_ctx_destroy(struct m0_pools_common *pc)
M0_INTERNAL int m0_reqh_mdpool_layout_build(struct m0_reqh *reqh)
void * m0_alloc(size_t size)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
static int m0_rconfc_start_sync(struct m0_rconfc *rconfc)
M0_INTERNAL int m0_conf_confc_ha_update(struct m0_confc *confc)
M0_INTERNAL const struct m0_fid M0_DOT_MOTR_FID
M0_INTERNAL void m0_rconfc_lock(struct m0_rconfc *rconfc)
M0_INTERNAL void m0_bitmap_set(struct m0_bitmap *map, size_t idx, bool val)
static void m0t1fs_ha_process_event(struct m0t1fs_sb *csb, enum m0_conf_ha_process_event event)
int m0t1fs_sync_fs(struct super_block *sb, int wait)
struct m0_sm_group * lo_grp
static struct super_block super_block
M0_INTERNAL void m0t1fs_kill_sb(struct super_block *sb)
static int m0t1fs_sb_mdpool_layouts_init(struct m0t1fs_sb *csb)
M0_INTERNAL void m0_motr_ha_connect(struct m0_motr_ha *mha)
static struct m0_clink clink[RDWR_REQUEST_MAX]
M0_INTERNAL int m0_reqh_service_setup(struct m0_reqh_service **out, struct m0_reqh_service_type *stype, struct m0_reqh *reqh, struct m0_reqh_context *rctx, const struct m0_fid *fid)
M0_INTERNAL int m0_fid_sscanf(const char *s, struct m0_fid *fid)
static int num_parse(uint32_t *dest, const substring_t *src)
M0_INTERNAL int m0t1fs_fs_conf_lock(struct m0t1fs_sb *csb)
M0_INTERNAL void m0t1fs_fs_lock(struct m0t1fs_sb *csb)
static struct fdmi_ctx ctx
int m0_addb2_sys_net_start_with(struct m0_addb2_sys *sys, struct m0_tl *head)
uint64_t m0_time_seconds(const m0_time_t time)
static bool m0t1fs_conf_ready_async_cb(struct m0_clink *clink)
struct m0_mutex m0t1fs_mutex
M0_INTERNAL bool m0t1fs_fs_is_locked(const struct m0t1fs_sb *csb)
M0_INTERNAL struct inode * m0t1fs_alloc_inode(struct super_block *sb)
M0_INTERNAL void m0_chan_signal_lock(struct m0_chan *chan)
struct io_mem_stats iommstats
M0_INTERNAL void m0_rconfc_fini(struct m0_rconfc *rconfc)
M0_INTERNAL int m0_reqh_state_get(struct m0_reqh *reqh)
const struct xattr_handler * m0t1fs_xattr_handlers[]
static int64_t m0_atomic64_get(const struct m0_atomic64 *a)
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
void m0_clink_add_lock(struct m0_chan *chan, struct m0_clink *link)
M0_INTERNAL int m0_conf_process2service_get(struct m0_confc *confc, const struct m0_fid *process_fid, enum m0_conf_service_type stype, struct m0_fid *sfid)
struct m0_reqh_service_type m0_rms_type
int m0t1fs_mds_statfs(struct m0t1fs_sb *csb, struct m0_fop **rep_fop)
M0_INTERNAL void m0_reqh_start(struct m0_reqh *reqh)
M0_INTERNAL void m0_rconfc_unlock(struct m0_rconfc *rconfc)
static struct super_block sb
int m0_net_domain_init(struct m0_net_domain *dom, const struct m0_net_xprt *xprt)
M0_INTERNAL int m0_pools_common_init(struct m0_pools_common *pc, struct m0_rpc_machine *rmach)
M0_INTERNAL struct m0_locality * m0_locality0_get(void)
struct m0_ha_dispatcher_cfg mhc_dispatcher_cfg
M0_INTERNAL const struct m0_fid M0_MDSERVICE_START_FID
int m0t1fs_rm_service_start(struct m0t1fs_sb *csb)
static void inodes_layout_ref_drop(struct m0t1fs_sb *csb)
struct m0_chan rh_conf_cache_exp
static void conf_ready_async_cb_locked(struct m0t1fs_sb *csb)
#define M0_ALLOC_PTR(ptr)
M0_INTERNAL void m0_clink_add(struct m0_chan *chan, struct m0_clink *link)
M0_INTERNAL void m0_conf_ha_process_event_post(struct m0_ha *ha, struct m0_ha_link *hl, const struct m0_fid *process_fid, uint64_t pid, enum m0_conf_ha_process_event event, enum m0_conf_ha_process_type type)
M0_INTERNAL int m0_pools_service_ctx_create(struct m0_pools_common *pc)
int m0t1fs_rpc_init(struct m0t1fs_sb *csb, const char *ep)
static uint32_t tm_recv_queue_min_len
M0_INTERNAL struct m0_addb2_sys * m0_addb2_global_get(void)
struct m0t1fs_sb * reqh2sb(struct m0_reqh *reqh)
M0_TL_DESCR_DEFINE(csb_inodes, "m0t1fs_inode anchored in m0t1fs_sb", M0_INTERNAL, struct m0t1fs_inode, ci_sb_linkage, ci_magic, M0_T1FS_INODE_MAGIC, M0_T1FS_INODE_HEAD_MAGIC)
void m0t1fs_net_fini(struct m0t1fs_sb *csb)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
static int m0t1fs_fid_sscanf(const char *s, struct m0_fid *fid, const char *descr)
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
M0_INTERNAL struct m0_rpc_session * m0t1fs_container_id_to_session(const struct m0_pool_version *pver, uint64_t container_id)
static struct m0_rconfc * rconfc(struct m0_client *m0c)
static int m0t1fs_statfs(struct dentry *dentry, struct kstatfs *buf)
M0_INTERNAL void m0_confc_close(struct m0_conf_obj *obj)
struct m0_rconfc rh_rconfc
static void reqh_fini(void)
M0_INTERNAL void m0_layout_instance_fini(struct m0_layout_instance *li)
M0_INTERNAL void m0_motr_ha_stop(struct m0_motr_ha *mha)
M0_INTERNAL void io_bob_tlists_init(void)
void m0t1fs_ha_fini(struct m0t1fs_sb *csb)
const struct m0_conf_obj_type M0_CONF_PROCESS_TYPE
static void m0t1fs_obf_dealloc(struct m0t1fs_sb *csb)
int m0t1fs_net_init(struct m0t1fs_sb *csb, const char *ep)
M0_INTERNAL int m0_pool_versions_setup(struct m0_pools_common *pc)
static const struct super_operations m0t1fs_super_operations
void m0_rpc_net_buffer_pool_cleanup(struct m0_net_buffer_pool *app_pool)
M0_INTERNAL void m0_pool_versions_destroy(struct m0_pools_common *pc)
M0_INTERNAL struct inode * m0t1fs_root_iget(struct super_block *sb, const struct m0_fid *root_fid)
M0_INTERNAL void m0_sm_asts_run(struct m0_sm_group *grp)
M0_INTERNAL void m0_motr_ha_fini(struct m0_motr_ha *mha)
#define m0_tl_for(name, head, obj)
M0_INTERNAL void m0_chan_fini_lock(struct m0_chan *chan)
static struct m0_addb2_source * s
static int m0t1fs_fill_super(struct super_block *sb, void *data, int silent __attribute__((unused)))
int m0t1fs_setup(struct m0t1fs_sb *csb, const struct mount_opts *mops)
struct m0_pdclust_src_addr src
M0_INTERNAL void m0_chan_broadcast(struct m0_chan *chan)
static struct m0_rpc_machine rpc_machine
M0_INTERNAL void m0t1fs_ref_put_lock(struct m0t1fs_sb *csb)
M0_INTERNAL unsigned int m0_full_name_hash(const unsigned char *name, unsigned int len)
static uint32_t max_rpc_msg_size
void m0t1fs_rm_service_quit(struct m0t1fs_sb *csb)
static int _fs_stats_fetch(struct m0t1fs_sb *csb, struct m0_fs_stats *stats)
static void m0_atomic64_set(struct m0_atomic64 *a, int64_t num)
M0_INTERNAL void m0_fid_tassume(struct m0_fid *fid, const struct m0_fid_type *ft)
M0_INTERNAL struct m0_reqh_service_ctx * m0_reqh_service_ctx_from_session(struct m0_rpc_session *session)
M0_INTERNAL void m0_pools_destroy(struct m0_pools_common *pc)
struct m0_net_buffer_pool * ntm_recv_pool
static void mount_opts_fini(struct mount_opts *mops)