這篇文章給大家分享的是有關(guān)cephfs linux kernel client針對(duì)superblock操作流程的示例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)公司專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、桂林網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為桂林等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
init_caches()
初始化如下幾個(gè)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之間的對(duì)應(yīng)關(guān)系
|__得到superblock且使用ceph_set_super()函數(shù)初始化
|__調(diào)用ceph_real_mount()函數(shù)來執(zhí)行實(shí)際的mount操作
ceph_real_mount()
|__若superblock中對(duì)應(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對(duì)應(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í)通過設(shè)置如下內(nèi)容來設(shè)置對(duì)superblock的操作:
s->s_xattr = ceph_xattr_handlers 處理擴(kuò)展屬性的
s->s_op = ceph_super_ops 處理針對(duì)superblock正常操作的
s->s_export_op = ceph_export_ops 處理針對(duì)superblock的export操作的
ceph_super_ops的類型是struct super_operations,其中包含了對(duì)superblock操作的所有回調(diào)函數(shù)集合。
ceph_alloc_inode() 該函數(shù)用于分配inode
|__從內(nèi)核cache中得到ceph inode信息,即:struct ceph_inode_info
|__初始化struct ceph_inode_info
|__設(shè)置了針對(duì)inode的writeback的內(nèi)核線程ceph_writeback_work
|__設(shè)置了針對(duì)inode的invalidate的內(nèi)核線程ceph_invalidate_work
|__設(shè)置了針對(duì)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中l(wèi)ayout的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鏈表上的請(qǐng)求同步到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請(qǐng)求同步到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í)行強(qiáng)制umount操作
|__查詢到所有的mds sessions并且調(diào)用__close_session()函數(shù)來關(guān)閉session
|__調(diào)用tick_requests()函數(shù)將未發(fā)送出去的request發(fā)送到其他mds進(jìn)程
|__調(diào)用__wake_requests()函數(shù)將mdsc->waiting_for_map上的請(qǐng)求發(fā)送到其他mds進(jìn)程上
ceph_xattr_handlers的類型是struct xattr_handler,其中包含了所有對(duì)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對(duì)應(yīng)的屬性值value以及屬性值value的大小size
|__檢查name是否是vxattr,若是則直接從vxattr處獲取name對(duì)應(yīng)的value值
|__調(diào)用ceph_do_getattr()函數(shù)從mds集群中獲取inode對(duì)應(yīng)的xattrs值
|__調(diào)用__build_xattrs()函數(shù)創(chuàng)建xattrs數(shù)據(jù)結(jié)構(gòu)
|__調(diào)用__get_xattr()函數(shù)從xattrs中得到name對(duì)應(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對(duì)應(yīng)的紅黑樹里
|__調(diào)用__ceph_mark_dirty_caps()函數(shù)設(shè)置caps dirty
|__調(diào)用ceph_sync_setxattr()函數(shù)將inode對(duì)應(yīng)的屬性名name和屬性值value同步到mds集群
感謝各位的閱讀!關(guān)于“cephfs linux kernel client針對(duì)superblock操作流程的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
網(wǎng)站標(biāo)題:cephfslinuxkernelclient針對(duì)superblock操作流程的示例分析
鏈接地址:http://jinyejixie.com/article46/pdcdeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、搜索引擎優(yōu)化、網(wǎng)站導(dǎo)航、微信公眾號(hào)、用戶體驗(yàn)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)