22 #include <linux/slab.h> 23 #include<linux/version.h> 24 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) 25 #include <linux/cred.h> 34 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_M0T1FS 43 stx_tlink, stx_link_magic,
52 .bt_magix_offset =
offsetof(
struct m0t1fs_inode, ci_magic),
70 struct m0t1fs_inode *
ci = M0T1FS_I(
inode);
73 &M0T1FS_SB(
inode->i_sb)->csb_root_fid);
78 struct m0t1fs_inode *
ci = M0T1FS_I(
inode);
85 struct m0t1fs_inode *
ci = M0T1FS_I(
inode);
92 struct m0t1fs_inode *
ci =
foo;
96 inode_init_once(&
ci->ci_inode);
108 sizeof(
struct m0t1fs_inode),
109 0, SLAB_HWCACHE_ALIGN,
137 struct m0t1fs_sb *
csb)
157 &
ci->ci_flock, &
ci->ci_creditor);
185 ci->ci_layout_instance =
NULL;
186 ci->ci_layout_changed =
false;
189 ispti_tlist_init(&
ci->ci_pending_tx);
191 csb_inodes_tlink_init(
ci);
205 ispti_tlist_fini(&
ci->ci_pending_tx);
213 struct m0t1fs_sb *
csb;
216 M0_ENTRY(
"ci: %p, is_root %s, layout_instance %p",
218 ci->ci_layout_instance);
221 csb = M0T1FS_SB(
ci->ci_inode.i_sb);
223 csb_inodes_tlist_remove(
ci);
225 m0t1fs_inode_bob_fini(
ci);
238 struct m0t1fs_inode *
ci;
250 return &
ci->ci_inode;
258 struct m0t1fs_inode *
ci = M0T1FS_I(
inode);
270 if (
ci->ci_layout_instance !=
NULL)
281 const struct m0_fid *root_fid)
284 struct m0t1fs_mdop
mo;
288 struct m0t1fs_sb *
csb;
295 mo.mo_attr.ca_tfid = *root_fid;
296 csb->csb_root_fid = *root_fid;
298 if (!
csb->csb_oostore) {
334 struct m0t1fs_inode *
ci;
353 struct m0t1fs_inode *
ci = M0T1FS_I(
inode);
355 struct m0t1fs_sb *
csb = M0T1FS_SB(
inode->i_sb);
362 ci->ci_flock.fi_fid =
fid;
380 #ifdef HAVE_INODE_BLKSIZE 381 inode->i_blksize = buffsize;
383 inode->i_blkbits = 12;
384 while ((1 <<
inode->i_blkbits) < buffsize)
401 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) 407 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) 417 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) 431 struct m0t1fs_inode *
ci = M0T1FS_I(
inode);
432 struct m0t1fs_sb *
csb = M0T1FS_SB(
inode->i_sb);
436 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,9,0) 441 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) 442 inode->i_uid = GLOBAL_ROOT_UID;
443 inode->i_gid = GLOBAL_ROOT_GID;
451 if (S_ISREG(
inode->i_mode)) {
455 }
else if (S_ISDIR(
inode->i_mode)) {
481 csb_inodes_tlist_add_tail(&
csb->csb_inodes,
ci);
496 struct m0t1fs_sb *
csb = M0T1FS_SB(
sb);
517 return ERR_CAST(
inode);
519 if ((
inode->i_state & I_NEW) != 0) {
522 }
else if (!(
inode->i_state & (I_FREEING | I_CLEAR))) {
528 if ((
inode->i_state & I_NEW) != 0)
556 if (layout ==
NULL) {
572 struct m0t1fs_sb *
csb;
582 (
int)
ci->ci_layout_id);
584 csb = M0T1FS_SB(
ci->ci_inode.i_sb);
590 if (
ci->ci_layout_instance !=
NULL)
592 ci->ci_layout_instance = linst;
615 ci->ci_layout_instance ==
NULL) {
M0_INTERNAL struct inode * m0t1fs_iget(struct super_block *sb, const struct m0_fid *fid, struct m0_fop_cob *body)
M0_INTERNAL struct m0_layout * m0_layout_find(struct m0_layout_domain *dom, uint64_t lid)
static int m0t1fs_build_layout_instance(struct m0t1fs_sb *csb, const uint64_t layout_id, const struct m0_fid *fid, struct m0_layout_instance **linst)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
M0_INTERNAL int m0t1fs_inode_layout_init(struct m0t1fs_inode *ci)
M0_INTERNAL void m0t1fs_inode_update_blksize(struct inode *inode, struct m0_layout *layout)
M0_INTERNAL uint64_t m0_fid_hash(const struct m0_fid *fid)
M0_INTERNAL struct m0_rm_domain * m0_rm_svc_domain_get(const struct m0_reqh_service *svc)
static void init_once(void *foo)
M0_INTERNAL int m0t1fs_inode_cache_init(void)
M0_INTERNAL int m0t1fs_fill_cob_attr(struct m0_fop_cob *body)
const m0_time_t M0_TIME_NEVER
M0_INTERNAL struct m0_pool_version * m0_pool_version_find(struct m0_pools_common *pc, const struct m0_fid *id)
static void m0t1fs_inode_fini(struct m0t1fs_inode *ci)
#define M0_LOG(level,...)
M0_BOB_DEFINE(M0_INTERNAL, &m0t1fs_inode_bob, m0t1fs_inode)
M0_INTERNAL const struct m0_fid * m0t1fs_inode_fid(const struct m0t1fs_inode *ci)
M0_INTERNAL void m0t1fs_destroy_inode(struct inode *inode)
int m0t1fs_mds_cob_getattr(struct m0t1fs_sb *csb, const struct m0t1fs_mdop *mo, struct m0_fop **rep_fop)
const struct address_space_operations m0t1fs_aops
void * m0_fop_data(const struct m0_fop *fop)
M0_INTERNAL const struct m0_fid M0_DOT_MOTR_FID_FID
static struct kmem_cache * m0t1fs_inode_cachep
M0_INTERNAL void m0t1fs_file_lock_fini(struct m0t1fs_inode *ci)
M0_INTERNAL void m0_rm_remote_init(struct m0_rm_remote *rem, struct m0_rm_resource *res)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
M0_INTERNAL int m0_fid_cmp(const struct m0_fid *fid0, const struct m0_fid *fid1)
M0_INTERNAL bool m0_fid_is_set(const struct m0_fid *fid)
struct m0_fop_getxattr_rep * rep
struct m0_pdclust_attr pl_attr
M0_INTERNAL void m0t1fs_inode_cache_fini(void)
M0_INTERNAL int m0_rm_owner_timedwait(struct m0_rm_owner *owner, uint64_t state, const m0_time_t abs_timeout)
static struct m0_pools_common pc
M0_INTERNAL int m0_layout_instance_build(struct m0_layout *l, const struct m0_fid *fid, struct m0_layout_instance **out)
M0_INTERNAL void m0t1fs_inode_bob_init(struct m0t1fs_inode *bob)
M0_INTERNAL bool m0t1fs_inode_is_dot_motr_fid(const struct inode *inode)
M0_INTERNAL bool m0t1fs_inode_bob_check(struct m0t1fs_inode *bob)
void m0_fop_put0_lock(struct m0_fop *fop)
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL uint64_t m0_pool_version2layout_id(const struct m0_fid *pv_fid, uint64_t lid)
#define m0_tl_teardown(name, head, obj)
M0_INTERNAL const char * m0_bool_to_str(bool b)
static void m0t1fs_inode_ispti_fini(struct m0t1fs_inode *ci)
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)
M0_INTERNAL const struct m0_fid M0_DOT_MOTR_FID
const struct file_operations m0t1fs_fid_dir_file_operations
static void m0t1fs_inode_init(struct m0t1fs_inode *ci)
M0_INTERNAL int m0t1fs_inode_layout_rebuild(struct m0t1fs_inode *ci, struct m0_fop_cob *body)
M0_TL_DESCR_DEFINE(ispti, "m0_reqh_service_txid pending an inode",, struct m0_reqh_service_txid, stx_tlink, stx_link_magic, M0_T1FS_INODE_PTI_MAGIC1, M0_T1FS_INODE_PTI_MAGIC2)
static struct super_block super_block
M0_INTERNAL struct inode * m0t1fs_alloc_inode(struct super_block *sb)
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
struct m0_reqh_service_type m0_rms_type
M0_INTERNAL struct m0_reqh_service * m0_reqh_service_find(const struct m0_reqh_service_type *st, const struct m0_reqh *reqh)
static struct super_block sb
static int m0t1fs_inode_read(struct inode *inode, struct m0_fop_cob *body)
M0_INTERNAL void m0_rm_remote_fini(struct m0_rm_remote *rem)
M0_INTERNAL void m0t1fs_inode_update(struct inode *inode, struct m0_fop_cob *body)
const struct inode_operations m0t1fs_dir_inode_operations
M0_INTERNAL bool m0t1fs_inode_is_root(const struct inode *inode)
static const struct m0_bob_type m0t1fs_inode_bob
M0_INTERNAL void m0_rm_owner_windup(struct m0_rm_owner *owner)
const struct inode_operations m0t1fs_fid_dir_inode_operations
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
void m0t1fs_fid_accept(struct m0t1fs_sb *csb, const struct m0_fid *fid)
#define M0_UINT128(hi, lo)
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)
M0_INTERNAL void m0_layout_instance_fini(struct m0_layout_instance *li)
M0_INTERNAL bool m0t1fs_inode_is_dot_motr(const struct inode *inode)
M0_INTERNAL void m0t1fs_file_lock_init(struct m0t1fs_inode *ci, struct m0t1fs_sb *csb)
M0_INTERNAL int m0t1fs_inode_test(struct inode *inode, void *opaque)
M0_INTERNAL void m0_layout_put(struct m0_layout *l)
M0_INTERNAL void m0_file_owner_fini(struct m0_rm_owner *owner)
M0_INTERNAL struct inode * m0t1fs_root_iget(struct super_block *sb, const struct m0_fid *root_fid)
const struct m0_uint128 m0_rm_m0t1fs_group
M0_INTERNAL bool m0_fid_is_valid(const struct m0_fid *fid)
const struct inode_operations m0t1fs_reg_inode_operations
const struct file_operations m0t1fs_dir_file_operations
#define offsetof(typ, memb)
const struct file_operations m0t1fs_reg_file_operations
static int m0t1fs_inode_set(struct inode *inode, void *opaque)
M0_INTERNAL struct m0_rm_domain * m0t1fs_rm_domain_get(struct m0t1fs_sb *sb)
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)
M0_TL_DEFINE(ispti,, struct m0_reqh_service_txid)