私はLinuxカーネルパスウォークを理解しようとしています。どのように以下のケースが解決されます。Linuxカーネルパスウォーク。 lookup_slow explain
をパスするために、
「/ ext3_dir/ext4_dir」
我々がマウントされたファイルシステムを以下しているとしましょう、ext4_dirはext4ファイルシステムのルートである、ext3のディレクトリext3_dirに取り付けられました。
Q1:ext4_dirのdentryがdentryキャッシュに存在しない場合や、ext3がext3の上にマウントされた後に常に存在する可能性はありますか?
Q2:
最初のdentryが
dentry = d_alloc_parallel(dir, name, &wq);
を割り当てられ、その後、我々は
inode->i_op->lookup(inode, dentry, flags);
を呼び出している
link_path_walk->walk_component->lookup_slow()
実際のファイルシステム関数を呼び出して、親ディレクトリのinodeのデータブロック内のコンポーネント(ここではext3_dir)を読み込みます。 ext3_dirはext3ファイルシステムにあるので、ext4_dirのデータをdentryに読み込むためにext4ファイルシステムにアクセスするにはどうすればよいですか?
おかげで、カピル
お返事ありがとうTsyvarev。どのようにそれが義務付けられているのか知っていますか、私はdcacheにルート歯列をどのように固定するのでしょうか。 – Kapil
わかりませんが、dentryには参照カウンタフィールドd_lockrefがあります。したがって、このカウンタをインクリメントすることで、VFSはデントリがキャッシュを離れるのを防ぎます。いずれにしても、ルートデントリを固定することはVFSの仕事であり、ファイルシステムドライバはこれに関与していません。 – Tsyvarev