久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

cephfs kernel client針對dir的inode操作代碼

155次閱讀
沒有評論

共計 4282 個字符,預計需要花費 11 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 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 操作代碼”有了一定的了解,如果想了解更多相關知識,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計4282字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 大竹县| 永靖县| 当阳市| 贵德县| 青海省| 潞西市| 汝南县| 砀山县| 黎川县| 三穗县| 天台县| 汶川县| 体育| 凭祥市| 金塔县| 德令哈市| 肥乡县| 晴隆县| 集贤县| 大荔县| 上犹县| 开江县| 合山市| 南丹县| 睢宁县| 梨树县| 饶平县| 新绛县| 辽宁省| 平潭县| 成武县| 印江| 香格里拉县| 龙门县| 兖州市| 手游| 湛江市| 南开区| 大安市| 阿鲁科尔沁旗| 保山市|