2017-09-14 129 views
0

我想了解Linux內核的路徑行走。下面的情況是如何解決:linux內核路徑走。 lookup_slow交代

的路徑,

「/ ext3_dir/ext4_dir」

比方說,我們有以下安裝的文件系統,ext4_dir是EXT4文件系統的根目錄,安裝在ext3的目錄ext3_dir。

Q1:是否有可能,在對ext4_dir任何時間目錄項上不存在目錄項緩存,否則將永遠在那裏安裝在ext3的頂部EXT4後?

Q2:如果dcache的丟失的情況是可能的,然後在下面的慢速路徑:

link_path_walk->walk_component->lookup_slow()

第一目錄項被分配

dentry = d_alloc_parallel(dir, name, &wq);

,然後我們稱之爲

inode->i_op->lookup(inode, dentry, flags);

它調用實際文件系統函數讀取組件的父目錄的inode的數據塊內,這裏ext3_dir。 由於ext3_dir是ext3文件系統,如何ext4的文件系統在這種情況下訪問閱讀ext4_dir的數據轉換成目錄項?

謝謝,卡皮爾

回答

1

目錄項表示的文件系統的安裝點是總是在高速緩存。此外,文件系統的根索引節點始終存在

所以,導航到「/ ext3_dir/ext4_dir」不需要文件系統的功能:兩者的dentry和inode與使用VFS緩存中提取。

+0

感謝Tsyvarev的答案。你也知道它是如何強制的,我的意思是我們如何將根dentry固定爲dcache。 – Kapil

+0

我不確定,但dentry具有引用計數器字段'd_lockref'。所以,通過增加這個計數器,VFS阻止dentry離開緩存。在任何情況下,固定根dentry是VFS的一項任務,文件系統驅動程序不涉及這一點。 – Tsyvarev