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

cephfs linux kernel client針對superblock操作流程的示例分析

185次閱讀
沒有評論

共計 3991 個字符,預(yù)計需要花費 10 分鐘才能閱讀完成。

這篇文章給大家分享的是有關(guān) cephfs linux kernel client 針對 superblock 操作流程的示例分析的內(nèi)容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。

init_caches()
  初始化如下幾個 cache:
    ceph_inode_cachep
    ceph_cap_cachep
    ceph_cap_flush_cachep
    ceph_dentry_cachep
    ceph_file_cachep
    cephfs cache 

ceph_mount()
|__解析 mount options
|__創(chuàng)建 fs client,即:struct ceph_fs_client
|__創(chuàng)建 mds client 且設(shè)置 fs client 和 mds client 之間的對應(yīng)關(guān)系
|__得到 superblock 且使用 ceph_set_super() 函數(shù)初始化
|__調(diào)用 ceph_real_mount() 函數(shù)來執(zhí)行實際的 mount 操作

ceph_real_mount()
|__若 superblock 中對應(yīng)的 s_boot 為空
  |__調(diào)用__ceph_open_session() 函數(shù)創(chuàng)建 client 到 mds 的 session 信息
  |__調(diào)用 open_root_dentry() 函數(shù)得到 cephfs 的 root dentry 信息
  |__將 root dentry 寫入到 superblock 中的 s_boot 中
|__若 mount options 中沒有 server path 內(nèi)容
  |__設(shè)置當(dāng)前 root 為 supberblock 對應(yīng)的 s_root
  |__調(diào)用 dget(root) 函數(shù)得到 root 的 dentry 信息
|__若 mount options 中有 server path 內(nèi)容
  |__調(diào)用 open_root_dentry() 得到 server path 指定的 root dentry 信息
|__設(shè)置 mount state 為 CEPH_MOUNT_MOUNTED

使用 ceph_set_super()函數(shù)初始化 superblock 時通過設(shè)置如下內(nèi)容來設(shè)置對 superblock 的操作:
s- s_xattr = ceph_xattr_handlers    處理擴展屬性的
s- s_op = ceph_super_ops      處理針對 superblock 正常操作的
s- s_export_op = ceph_export_ops    處理針對 superblock 的 export 操作的

ceph_super_ops 的類型是 struct super_operations,其中包含了對 superblock 操作的所有回調(diào)函數(shù)集合。
ceph_alloc_inode()    該函數(shù)用于分配 inode
|__從內(nèi)核 cache 中得到 ceph inode 信息,即:struct ceph_inode_info 
|__初始化 struct ceph_inode_info
  |__設(shè)置了針對 inode 的 writeback 的內(nèi)核線程 ceph_writeback_work
  |__設(shè)置了針對 inode 的 invalidate 的內(nèi)核線程 ceph_invalidate_work
  |__設(shè)置了針對 inode 的 vmtruncate 的內(nèi)核線程 ceph_vmtruncate_work
|__返回 struct inode 信息

ceph_destroy_inode(struct inode *inode)
|__調(diào)用 ceph_fscache_unregister_inode_cookie()函數(shù)將 inode 從 fscache 中清除掉
|__調(diào)用 ceph_queue_caps_release() 函數(shù)將 ceph_inode_info 中所有 caps 刪除掉
|__若 ceph_inode_info 中包含 snap realm 信息
  |__調(diào)用 ceph_put_snap_realm() 釋放 snap realm 
|__釋放 ceph_inode_info 中的 fragtree 信息
|__調(diào)用__ceph_destroy_xattrs() 函數(shù)釋放 ceph_inode_info 中所有的 xattrs 信息
|__調(diào)用 ceph_put_string() 函數(shù)釋放 ceph_inode_info 中 layout 的 pool_ns 信息

ceph_write_inode(struct inode *inode, struct writeback_control *wbc)
|__調(diào)用 try_flush_caps()函數(shù)將 ceph_inode_info 中所有 dirty caps 刷回到 mds 集群中

ceph_evict_inode(struct inode *inode)
|__調(diào)用 ceph_sync_write_wait()函數(shù)將 ceph_inode_info 中所有 i_unsafe_writes 鏈表上的請求同步到 ceph 集群
|__調(diào)用 truncate_inode_pages_final() 函數(shù)將 inode 所占用的 pages 都釋放掉
|__調(diào)用 clear_inode() 清除 inode 信息

ceph_sync_fs(struct super_block *sb, int wait)
|__從 superblock 中得到 struct ceph_fs_client 信息
|__調(diào)用 ceph_osdc_sync() 函數(shù)將所有 osdc 連接的 osds 上的所有 struct ceph_osd_request 請求同步到 ceph 集群
|__調(diào)用 ceph_mdsc_sync() 函數(shù)將 ceph_inode_info 中所有 dirty caps 刷回到 mds 集群中

ceph_put_super(struct super_block *s)
|__調(diào)用 ceph_mdsc_close_sessions()函數(shù)來關(guān)閉所有的 mds sessions 
 
ceph_show_options(struct seq_file *m, struct dentry *root)
|__顯示所有的 mount options 在 /proc/mounts 下

ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
|__根據(jù)參數(shù) dentry 得到 struct ceph_fs_client 信息,即:fsc=ceph_inode_to_client()
|__通過 struct ceph_fs_client 得到 struct ceph_monmap 信息
|__通過調(diào)用 ceph_monc_do_statfs() 從 monitor 處得到所有的 stats 信息
|__將從 monitor 處得到的 stats 信息格式化輸出到 buf 中

ceph_umount_begin(struct super_block *sb)
|__通過 superblock 得到 struct ceph_fs_client 信息
|__調(diào)用 ceph_mdsc_force_umount() 函數(shù)執(zhí)行強制 umount 操作
  |__查詢到所有的 mds sessions 并且調(diào)用__close_session() 函數(shù)來關(guān)閉 session
  |__調(diào)用 tick_requests()函數(shù)將未發(fā)送出去的 request 發(fā)送到其他 mds 進程
|__調(diào)用__wake_requests() 函數(shù)將 mdsc- waiting_for_map 上的請求發(fā)送到其他 mds 進程上

ceph_xattr_handlers 的類型是 struct xattr_handler,其中包含了所有對 inode 的 xattr 的操作。
ceph_get_xattr_handler(struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, char *name, void *value, size_t size)
|__調(diào)用 ceph_is_valid_xattr()函數(shù)檢查 name 是否是有效的屬性名
|__調(diào)用__ceph_getxattr() 函數(shù)得到屬性名 name 對應(yīng)的屬性值 value 以及屬性值 value 的大小 size
  |__檢查 name 是否是 vxattr,若是則直接從 vxattr 處獲取 name 對應(yīng)的 value 值
  |__調(diào)用 ceph_do_getattr() 函數(shù)從 mds 集群中獲取 inode 對應(yīng)的 xattrs 值
  |__調(diào)用__build_xattrs() 函數(shù)創(chuàng)建 xattrs 數(shù)據(jù)結(jié)構(gòu)
  |__調(diào)用__get_xattr() 函數(shù)從 xattrs 中得到 name 對應(yīng)的 value
 
ceph_set_xattr_handler(struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, char *name, void *value, size_t size, int flags)
|__調(diào)用 ceph_is_valid_xattr()函數(shù)檢查 name 是否是有效的屬性名
|__調(diào)用__ceph_setxattr() 函數(shù)設(shè)置屬性名 name 和屬性值 value 并同步到 mds 集群中
  |__調(diào)用__build_xattrs() 函數(shù)得到 xattrs 數(shù)據(jù)結(jié)構(gòu)
  |__調(diào)用__set_xattr() 函數(shù)將屬性名 name 和屬性值 value 寫入到 ceph_inode_info 的 xattrs 對應(yīng)的紅黑樹里
  |__調(diào)用__ceph_mark_dirty_caps() 函數(shù)設(shè)置 caps dirty
|__調(diào)用 ceph_sync_setxattr()函數(shù)將 inode 對應(yīng)的屬性名 name 和屬性值 value 同步到 mds 集群
 

感謝各位的閱讀!關(guān)于“cephfs linux kernel client 針對 superblock 操作流程的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計3991字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 喀什市| 宁阳县| 陈巴尔虎旗| 五常市| 长宁县| 邵阳县| 桐城市| 通河县| 马关县| 正安县| 仙居县| 子洲县| 孝感市| 富川| 平南县| 石狮市| 白玉县| 锡林郭勒盟| 阿尔山市| 清涧县| 关岭| 池州市| 文登市| 广水市| 泸定县| 华蓥市| 济源市| 登封市| 英山县| 枣阳市| 松江区| 赤峰市| 临西县| 神池县| 佛学| 新津县| 津市市| 灯塔市| 洪雅县| 靖江市| 亚东县|