您好,登錄后才能下訂單哦!
小編給大家分享一下cephfs kernel client針對dir的inode操作代碼,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
cephfs kernel client針對dir的inode操作
const struct inode_operations ceph_dir_iops = {
.lookup = ceph_lookup,
.permission = ceph_permission,
.getattr = ceph_getattr,
.setattr = ceph_setattr,
.setxattr = generic_setxattr,
.getxattr = generic_getxattr,
.listxattr = ceph_listxattr,
.removexattr = generic_removexattr,
.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進程
看完了這篇文章,相信你對“cephfs kernel client針對dir的inode操作代碼”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。