我想了解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的數據轉換成目錄項?
謝謝,卡皮爾
感謝Tsyvarev的答案。你也知道它是如何強制的,我的意思是我們如何將根dentry固定爲dcache。 – Kapil
我不確定,但dentry具有引用計數器字段'd_lockref'。所以,通過增加這個計數器,VFS阻止dentry離開緩存。在任何情況下,固定根dentry是VFS的一項任務,文件系統驅動程序不涉及這一點。 – Tsyvarev