91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-12-17 10:24:09 來源:億速云 閱讀:298 作者:小新 欄目:云計算

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

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
|__創建fs client,即:struct ceph_fs_client
|__創建mds client且設置fs client和mds client之間的對應關系
|__得到superblock且使用ceph_set_super()函數初始化
|__調用ceph_real_mount()函數來執行實際的mount操作

ceph_real_mount()
|__若superblock中對應的s_boot為空
  |__調用__ceph_open_session()函數創建client到mds的session信息
  |__調用open_root_dentry()函數得到cephfs的root dentry信息
  |__將root dentry寫入到superblock中的s_boot中
|__若mount options中沒有server path內容
  |__設置當前root為supberblock對應的s_root
  |__調用dget(root)函數得到root的dentry信息
|__若mount options中有server path內容
  |__調用open_root_dentry()得到server path指定的root dentry信息
|__設置mount state為CEPH_MOUNT_MOUNTED

使用ceph_set_super()函數初始化superblock時通過設置如下內容來設置對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操作的所有回調函數集合。
ceph_alloc_inode()    該函數用于分配inode
|__從內核cache中得到ceph inode信息,即:struct ceph_inode_info 
|__初始化struct ceph_inode_info
  |__設置了針對inode的writeback的內核線程ceph_writeback_work
  |__設置了針對inode的invalidate的內核線程ceph_invalidate_work
  |__設置了針對inode的vmtruncate的內核線程ceph_vmtruncate_work
|__返回struct inode信息

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

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

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

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

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

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

ceph_umount_begin(struct super_block *sb)
|__通過superblock得到struct ceph_fs_client信息
|__調用ceph_mdsc_force_umount()函數執行強制umount操作
  |__查詢到所有的mds sessions并且調用__close_session()函數來關閉session
  |__調用tick_requests()函數將未發送出去的request發送到其他mds進程
|__調用__wake_requests()函數將mdsc->waiting_for_map上的請求發送到其他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)
|__調用ceph_is_valid_xattr()函數檢查name是否是有效的屬性名
|__調用__ceph_getxattr()函數得到屬性名name對應的屬性值value以及屬性值value的大小size
  |__檢查name是否是vxattr,若是則直接從vxattr處獲取name對應的value值
  |__調用ceph_do_getattr()函數從mds集群中獲取inode對應的xattrs值
  |__調用__build_xattrs()函數創建xattrs數據結構
  |__調用__get_xattr()函數從xattrs中得到name對應的value
  
ceph_set_xattr_handler(struct xattr_handler *handler, struct dentry *dentry, struct inode *inode, char *name, void *value, size_t size, int flags)
|__調用ceph_is_valid_xattr()函數檢查name是否是有效的屬性名
|__調用__ceph_setxattr()函數設置屬性名name和屬性值value并同步到mds集群中
  |__調用__build_xattrs()函數得到xattrs數據結構
  |__調用__set_xattr()函數將屬性名name和屬性值value寫入到ceph_inode_info的xattrs對應的紅黑樹里
  |__調用__ceph_mark_dirty_caps()函數設置caps dirty
|__調用ceph_sync_setxattr()函數將inode對應的屬性名name和屬性值value同步到mds集群
 

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广汉市| 临颍县| 密山市| 洪泽县| 微山县| 铁岭县| 张家口市| 大名县| 兴化市| 巴里| 凤城市| 抚松县| 格尔木市| 平南县| 东台市| 宾阳县| 许昌市| 呼和浩特市| 赣州市| 万宁市| 玉门市| 温州市| 博兴县| 江川县| 工布江达县| 正镶白旗| 珲春市| 灵寿县| 天镇县| 衡水市| 吉林市| 邳州市| 柳河县| 浪卡子县| 潼关县| 茂名市| 汶上县| 和静县| 莎车县| 淮北市| 边坝县|