2017-09-14 11 views
0

私は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()

:Dキャッシュミスの場合は、以下の低速パスでことが可能である場合

実際のファイルシステム関数を呼び出して、親ディレクトリのinodeのデータブロック内のコンポーネント(ここではext3_dir)を読み込みます。 ext3_dirはext3ファイルシステムにあるので、ext4_dirのデータをdentryに読み込むためにext4ファイルシステムにアクセスするにはどうすればよいですか?

おかげで、カピル

答えて

1

のdentryは、ファイルシステムのマウントポイントはキャッシュに常にある表現しました。また、ファイルシステムのルートiノードは常に存在します

したがって、 "/ ext3_dir/ext4_dir"に移動するためのファイルシステムの機能は必要ありません.DentryとInodeの両方がVFSキャッシュを使用して抽出されます。

+0

お返事ありがとうTsyvarev。どのようにそれが義務付けられているのか知っていますか、私はdcacheにルート歯列をどのように固定するのでしょうか。 – Kapil

+0

わかりませんが、dentryには参照カウンタフィールドd_lockrefがあります。したがって、このカウンタをインクリメントすることで、VFSはデントリがキャッシュを離れるのを防ぎます。いずれにしても、ルートデントリを固定することはVFSの仕事であり、ファイルシステムドライバはこれに関与していません。 – Tsyvarev

関連する問題