cephfs kernel client針對dir的inode操做

cephfs kernel client針對dir的inode操做node

const struct inode_operations ceph_dir_iops = {數組

        .lookup = ceph_lookup,緩存

        .permission = ceph_permission,數據結構

        .getattr = ceph_getattr,函數

        .setattr = ceph_setattr,ui

        .setxattr = generic_setxattr,atom

        .getxattr = generic_getxattr,進程

        .listxattr = ceph_listxattr,內存

        .removexattr = generic_removexattr,rem

        .get_acl = ceph_get_acl,

        .set_acl = ceph_set_acl,

        .mknod = ceph_mknod,

        .symlink = ceph_symlink,

        .mkdir = ceph_mkdir,

        .link = ceph_link,

        .unlink = ceph_unlink,

        .rmdir = ceph_unlink,

        .rename = ceph_rename,

        .create = ceph_create,

        .atomic_open = ceph_atomic_open,

};

 

ceph_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)        查找目錄時調用該函數

|__調用ceph_init_dentry()函數來初始化dentry數據結構,其中包括針對dentry的操做集ceph_dentry_ops

|__設置操做碼op=CEPH_MDS_OP_LOOKUPSNAP或CEPH_MDS_OP_LOOKUP

|__調用ceph_mdsc_create_request()函數建立一個mds請求

|__調用ceph_mdsc_do_request()函數將請求同步發送給mds進程

 

ceph_permission(struct inode *inode, int mask)        檢查dir是否有mask指定的訪問權限

|__調用ceph_do_getattr()函數從本地緩存或mds集羣中獲得CEPH_CAP_AUTH_SHARED對應的權限

|__調用generic_permission()函數作常規的權限檢查

 

ceph_setattr(struct dentry *dentry, struct iattr *attr)        設置文件屬性時調用該函數

|__調用__ceph_setattr()函數

    |__調用ceph_mdsc_create_request()函數建立mds集羣請求

    |__根據設置具體屬性的內容如:ATTR_UID/ATTR_GID/ATTR_MODE/ATTR_ATIME/ATTR_MTIME/ATTR_SIZE/ATTR_CTIME設置請求數據結構中的具體項

    |__調用ceph_mdsc_do_reqeust()函數將請求同步發送給mds進程

 

ceph_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)        獲取文件屬性時調用該函數

|__調用ceph_do_getattr(CEPH_STAT_CAP_INODE_ALL)函數從mds集羣中讀取inode的全部屬性值

|__調用generic_fillattr()函數設置通用的屬性值到stat中

|__將cephfs相關的屬性值設置到stat中

 

ceph_listxattr(struct dentry *dentry, char *names, size_t size)        列出inode的xattrs時該函數被調用

|__若xattrs的version爲0

    |__調用ceph_do_getattr(CEPH_STAT_CAP_XATTR)函數從mds集羣中讀取xattr信息

|__調用__build_xattrs()函數建立xattr屬性

|__調用__copy_xattr_names()函數將xattr屬性的全部名字信息複製到names數組中

 

ceph_get_acl(struct inode *inode, int type)    讀取inode的acl信息時調用該函數

|__調用__ceph_getxattr()函數從mds集羣中讀取XATTR_NAME_POSIX_ACL_ACCESS或XATTR_NAME_POSIX_ACL_DEFUALT的屬性值

|__調用posix_acl_from_xattr()函數將acl信息讀取到內存中的struct posix_acl數據結構中

|__調用ceph_set_cache_acl()函數將內存中的struct posix_acl數據結構寫入到cache中

 

ceph_set_acl(struct inode *inode, struct posix_acl *acl, int type)    設置inode的acl信息時調用該函數

|__調用posix_acl_xattr_size()函數獲得xattr的大小

|__調用posix_acl_to_xattr()函數將acl轉換成xattr格式

|__調用__ceph_setxattr()函數將acl轉換的xattr數據寫入到mds集羣

|__調用ceph_set_cached_acl()函數將新的acl信息寫入到cache中

 

ceph_mknod(struct inode *dir, sturct dentry *dentry, umode_t mode, dev_t rdev)

|__調用ceph_pre_init_acls()函數獲得mode和struct ceph_acls_info數據結構內容

|__調用ceph_mdsc_create_request(CEPH_MDS_OP_MKMOD)函數建立一個mds請求

|__調用ceph_mdsc_do_request()函數將請求同步發送給mds進程

 

ceph_symlink(struct inode *dir, struct dentry *dentry, const char *dest)

|__調用ceph_mdsc_create_request(CEPH_MDS_OP_SYMLINK)函數建立一個mds請求

|__調用ceph_mdsc_do_request()函數將請求同步發送給mds進程

 

ceph_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)

|__獲得操做碼op=CEPH_MDS_OP_MKDIR或者CEPH_MDS_OP_MKSNAP

|__調用ceph_mdsc_create_request(op)函數建立一個mds請求

|__調用ceph_mdsc_do_request()函數將請求同步發送給mds進程

|__調用ceph_init_inode_acls()函數設置dentry對應的inode的默認acls

 

ceph_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)

|__調用ceph_mdsc_create_request(CEPH_MDS_OP_LINK)函數建立一個mds請求

|__調用ceph_mdsc_do_request()函數將請求同步發送給mds進程

 

ceph_unlink(struct inode *dir, struct dentry *dentry)

|__獲得操做碼op=CEPH_MDS_OP_RMSNAP或者CEPH_MDS_OP_RMDIR或者CEPH_MDS_OP_RMLINK

|__調用ceph_mdsc_create_request(op)函數建立一個mds請求

|__調用ceph_mdsc_do_request()函數將請求同步發送給mds進程

 

ceph_rename(struct inode *old_inode, struct dentry *old_dentry, struct inode *new_inode, struct dentry *new_dentry)

|__獲得操做碼op=CEPH_MDS_OP_RENAME或者CEPH_MDS_OP_RENAMESNAP

|__調用ceph_mdsc_create_request(op)函數建立一個mds請求

|__調用ceph_mdsc_do_request()函數將請求同步發送給mds進程

|__調用ceph_dir_clear_complete()函數增長release的引用計數

|__調用d_move()函數更新內存中的dentry

|__調用ceph_invalidate_dentry_lease()函數刷新dentry的time和lease_shared_gen字段

 

ceph_create(struct inode *dir, struct dentry *dentry, umode_t mode, bool exel)

|__調用ceph_mknod()函數完成目錄的建立工做 

 

ceph_atomic_open(struct inode *dir, struct dentry *dentry, struct file *file, unsigned flags, umode_t mode, int *opened)     lookup+open在一個request中實現

|__調用ceph_init_dentry()函數來初始化dentry數據結構,其中包括針對dentry的操做集ceph_dentry_ops

|__調用prepare_open_request()函數來建立操做碼是CEPH_MDS_OP_CREATE或者CEPH_MDS_OP_OPEN的mds請求

|__調用ceph_mdsc_do_request()函數將請求同步發送給mds進程

相關文章
相關標籤/搜索