欢迎光临
我们一直在努力

cephfs kernel client针对inode的相关操作代码

小编给大家分享一下cephfs kernel client针对inode的相关操作代码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

针对文件的inode的操作体现在数据结构struct inode_operations中,具体内容如下:

const struct inode_operations ceph_file_iops = {

        .permission = ceph_permission,

        .setattr = ceph_setattr,

        .getattr = ceph_getattr,

        .setxattr = generic_setxattr,

        .getxattr = generic_getxattr,

        .listxattr = ceph_listxattr,

        .removexattr = generic_removexattr,

        .get_acl = ceph_get_acl,

        .set_acl = ceph_set_acl,

};

ceph_permission(struct inode *inode, int mask)        检查inode是否有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中

看完了这篇文章,相信你对“cephfs kernel client针对inode的相关操作代码”有了一定的了解,如果想了解更多相关知识,欢迎关注云搜网行业资讯频道,感谢各位的阅读!

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。