Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
dentryは必要に応じてどんどん動的に確保していく。必ずiノードとリンクされるため、dentryの総数はiノード数に準じた値となる。
dentry領域の確保はd_alloc関数にて行われる。ファイル名が17byte以上の場合は、dentryの他にファイル名格納用のメモリを別途確保する。確保したメモリはdentryとして初期化(他のdentryとのリンクを張り、参照数を1とする)
必要が無くなったdentry領域の解放はd_free関数にて行われる。ここでは純粋にdentryを空きメモリに返却する。この関数は上記dput関数と、次に述べるprune_one_dentry関数から呼び出される。
d_add関数は、dentryを利用可能な状態にする。dentryのキャッシュへの登録(d_rehash関数)とdentryとiノードとのリンクを行う。
d_delete関数は、dentryを利用不可な状態にする。この関数はファイル削除時に呼び出されるのだが、iノードの解放のみを行い、ディレクトリキャッシュからはずしていない。存在しないファイルのdentryがキャッシュにヒットするため、エレガントな作りとは言えない。パス検索でも無駄なエラーチェックを行う結果となっている。
参照数が2以上の場合はopenしているファイルの削除を意味している。そのうちcloseの延長でdput関数が呼び出され、dentry_unusedリストに繋ぎ直される。
d_delete(dentry) if(参照数が1) { iノードの解放(dentry_iput関数) return; } キャッシュから落す。(d_drop関数)
(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST1
[ページ情報]
更新日時: 2008-08-27 14:18:58, 更新者: hiromichi-m
[権限]
表示:無制限, 編集:ログインユーザ, 削除/設定:メンバー