init_caches()
初始化以下幾個cache:
ceph_inode_cachep
ceph_cap_cachep
ceph_cap_flush_cachep
ceph_dentry_cachep
ceph_file_cachep
cephfs cache node
ceph_mount()
|__解析mount options
|__建立fs client,即:struct ceph_fs_client
|__建立mds client且設置fs client和mds client之間的對應關係
|__獲得superblock且使用ceph_set_super()函數初始化
|__調用ceph_real_mount()函數來執行實際的mount操做cookie
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_MOUNTEDsession
使用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信息ui
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信息server
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下get
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集羣