1. 程式人生 > >f2fs 系列之七:page cache相關操作和接口

f2fs 系列之七:page cache相關操作和接口

sub ddr 獲得 有一個 緩存 submit syn 文件 ESS

同ext4 一樣, f2fs 把不需要sync的寫通過page cache的接口落盤。為此,有必要了解f2fs中 page cache相關的接口。

以讀為例:

do_read_inode依據inode節點號,將inode所在的磁盤block讀到頁緩存,該block恰好對應著頁緩存中的一個page,對page進行F2FS_INODE轉換,轉換成f2fs_inode結構。最後使用f2fs_inode 對inode初始化。
我們接著深入get_node_page函數,看看f2fs是如何讀取磁盤block的。

__get_node_page函數。
該函數首先調用grab_cache_page查找address_space中是否有inode索引節點號對應的page,如果沒有則創建一個新的page插入到頁緩存中。緊接著調用read_node_page從磁盤中讀取inode對應的block,將block數據放到剛剛創建的page中,最後返回讀取到的page。

進入read_node_page。
該函數首先構造bio所需的信息,將信息填充在f2fs_io_info中,並調用get_node_info獲得node信息,放到node_info中。最後調用f2fs_submit_page_bio提交bio請求,從磁盤中讀取block到page中。

f2fs有三種inode,meta_inode,node_inode和普通的文件inode,前兩種inode只存在於vfs層,且數量只有一個。meta_inode對應於SIT,NAT,SSA,checkpoint和super block這些文件系統元數據,node inode對應於main area的node segment的數據,普通文件inode讀寫的區域對應於main area的data segment。所以,所有的f2fs數據的讀寫都是通過vfs層的inode的。這些inode的保存在f2fs_sb_info中,在文件系統初始化時f2fs_fill_super生成。再看inode的初始化過程,在函數inode.c/f2fs_iget中:

f2fs 系列之七:page cache相關操作和接口