中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

cephfs linux kernel client針對fscache的操作代碼

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

這篇文章主要為大家展示了“cephfs linux kernel client針對fscache的操作代碼”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“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的操作代碼”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

东阿县| 中卫市| 深圳市| 金乡县| 云浮市| 盐边县| 葵青区| 江川县| 遂平县| 阿拉善左旗| 武定县| 东港市| 宜宾市| 富平县| 青川县| 禹州市| 江都市| 四会市| 鄄城县| 长泰县| 沙河市| 聂拉木县| 潮安县| 饶河县| 吉林市| 阿克苏市| 浑源县| 收藏| 扎鲁特旗| 商城县| 通化县| 饶阳县| 友谊县| 江城| 桃园市| 苏州市| 九江县| 碌曲县| 德阳市| 南涧| 巴东县|