共计 4344 个字符,预计需要花费 11 分钟才能阅读完成。
这篇文章主要为大家展示了“cephfs linux kernel client 针对 fscache 的操作代码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“cephfs linux kernel client 针对 fscache 的操作代码”这篇文章吧。
针对 inode 在 fscache 中操作主要集中在数据结构 struct fscache_cookie_def 中,具体的数据结构及其操作如下:
static const struct fscache_cookie_def ceph_fscache_inode_object_def = {
.name = CEPH.inode ,
.type = FSCACHE_COOKIE_TYPE_DATAFILE,
.get_key = ceph_fscache_inode_get_key,
.get_attr = ceph_fscache_inode_get_attr,
.get_aux = ceph_fscache_inode_get_aux,
.check_aux = ceph_fscache_inode_check_aux,
.now_uncached = ceph_fscache_inode_now_uncached,
};
ceph_fscache_inode_get_key(void *cookie_netfs_data, void *buffer, uint16_t maxbuf) 读取 struct ceph_inode_info 中的 i_vino 信息到 buffer
|__从参数 cookie_netfs_data 的到 struct ceph_inode_info 数据结构
|__调用 memcpy() 将 struct ceph_inode_info 中的 i_vino 内容复制到 buffer 中
ceph_fscache_inode_get_attr(void *cookie_netfs_data, uint64_t *size) 读取 struct ceph_inode_info 中 vfs_inode 的大小
|__从参数 cookie_netfs_data 的到 struct ceph_inode_info 数据结构
|__调用 i_size_read() 函数读取 struct ceph_inode_info 中 vfs_inode 的大小且保存到 size 中
ceph_fscache_inode_get_aux(void *cookie_netfs_data, void *buffer, uint16_t bufmax)
|__从参数 cookie_netfs_data 的到 struct ceph_inode_info 数据结构
|__初始化 struct ceph_aux_inode 信息
|__从 struct ceph_inode_info 结构中初始化 struct ceph_aux_inode 信息
|__将 struct ceph_aux_inode 信息复制到 buffer 中
ceph_fscache_inode_check_aux(void *cookie_netfs_data, void *data, uint16_t dlen)
|__从参数 cookie_netfs_data 的到 struct ceph_inode_info 数据结构
|__从 struct ceph_inode_info 结构中初始化 struct ceph_aux_inode 信息
|__比较参数中的 data 和初始化后的 struct ceph_aux_inode 信息
ceph_fscache_inode_now_uncached(void *cookie_netfs_data)
|__从参数 cookie_netfs_data 的到 struct ceph_inode_info 数据结构
|__调用 pagevec_init() 函数初始化 pvec
|__调用 pagevec_lookup() 函数查找 struct ceph_inode_info 里 vfs_inode.i_mapping 里所有映射的物理内存页
|__调用 ClearPageFsCache() 函数清除物理内存页的 fscache
|__调用 pagevec_release() 函数释放 pvec
ceph_fscache_register_inode_cookie(struct inode *inode)
|__从参数 inode 中得到 struct ceph_inode_info 以及 struct ceph_fs_client 信息
|__调用 fscache_acquire_cookie() 函数得到访问 ceph fscache 的 cookie 值且将该 cookie 值保存到 struct ceph_inode_info 的 fscache 中
ceph_fscache_unregister_inode_cookie(struct ceph_inode_info *ci)
|__调用 fscache_uncache_all_inode_pages() 函数从 cache 中删除所有 inode 占用的物理内存页
|__调用 fscache_relinquish_cookie() 函数删除 cookie
ceph_fscache_can_enable(void *data)
|__从参数 data 中得到 struct inode 数据结构
|__调用 inode_is_open_for_write(inode) 函数且返回该函数返回值的非
ceph_fscache_file_set_cookie(struct inode *inode, struct file *filp)
|__从参数 inode 得到 struct ceph_inode_info 数据结构
|__调用 fscache_cookie_valid() 函数检查 struct ceph_inode_info 中的 fscache 是否有效,若无效则直接返回
|__调用 inode_is_open_for_write() 函数检查 inode 是打开并可写
|__调用 fscache_disable_cookie() 函数禁用 cookie
|__调用 fscache_uncache_all_inode_pages() 函数删除掉 cache 中 inode 的所有物理内存页
|__调用 inode_is_open_for_write() 函数检查 inode 是未打开且不可写
|__调用 fscache_enable_cookie() 函数启用 cookie
ceph_fscache_register()
|__调用 fscache_register_netfs() 函数注册 ceph 的 fscache
ceph_fscache_unregister()
|__调用 fscache_unregister_netfs() 函数注销 ceph 的 fscache
ceph_fscache_register_fs(struct ceph_fs_client *fs)
|__调用 fscache_acquire_cookie() 函数得到访问 ceph fscache 的 cookie 值且将该 cookie 值保存到 struct ceph_fs_client 的 fscache 中
ceph_fscache_unregister_fs(struct ceph_fs_client *fsc)
|__调用 fscache_relinquish_cookie() 函数释放 fsc- fscache 数据结构
ceph_fscache_session_get_key(void *cookie_netfs_data, void *buffer, uint16_t maxbuf)
|__从参数 cookie_netfs_data 的到 struct ceph_fs_client 数据结构
|__调用 memcpy() 函数将 struct ceph_fs_client 数据结构中的 client- fsid 值复制到 buffer 中
ceph_readpage_from_fscache(struct inode *inode, struct page *page)
|__从参数 inode 得到 struct ceph_inode_info 数据结构
|__调用 fscache_read_or_alloc_page() 函数从 fscache 中读取 inode 的内容并写到 page 中
ceph_readpages_from_fscache(struct inode *inode, struct address_space *mapping, struct list_head *pages, unsigned *nr_pages)
|__从参数 inode 得到 struct ceph_inode_info 数据结构
|__调用 fscache_read_or_alloc_pages() 函数从 fscahe 中读取 mapping 中的数据并写入到 pages 中
ceph_readpage_to_fscache(struct inode *inode, struct page *page)
|__从参数 inode 得到 struct ceph_inode_info 数据结构
|__调用 fscache_write_page() 函数将物理内存页 page 中的数据同步到 fscache 中
ceph_invalidate_fscache_page(struct inode *inode, struct page *page)
|__从参数 inode 得到 struct ceph_inode_info 数据结构
|__调用 fscache_wait_on_page_write() 函数等待 page 写入完成
|__调用 fscache_uncache_page() 函数将 page 中的内容从 struct ceph_inode_info 中的 fscache 中删除
ceph_fscache_revalidate_cookie(struct ceph_inode_info *ci)
|__调用 cache_valid() 函数检查 ci 指定的 fscache 是否有效,若无效
|__调用 fscache_check_consistency() 函数校验 ci- fscache 的一致性,若不一致
|__调用 fscache_invalidate() 函数设置 ci- fscache 无效
|__设置 ci- i_fscache_gen=ci- i_rdcache_gen
以上是“cephfs linux kernel client 针对 fscache 的操作代码”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!