主なdentry操作関数
- dget()
- dput()
- dentry領域の参照数を一つ減らす。
- 参照数が0で、かつ既にハッシュに無ければ、そのdentry領域を削除する。
- 参照数が0で、ハッシュに残っていれば、dentry_unusedリストに リンクする(解放候補のリスト)。
- d_alloc()
- d_free()
- d_add()
- dentryとiノードをリンクし、dentryをハッシュに登録する。
- d_rehash()
- d_drop()
- d_delete()
- dentryを無効にする。iノードとのリンクを切り解放する (dentry_iput関数)。ただし、ハッシュにはリンクしたままとする。
- dentry_iput()
- dentryとリンクされているiノードとのリンクを切り、iノードを解放する(iput関数)
- d_instantiate()
- d_invalidate()
- dentryを無効化する。参照数が1以上のdentryは無効化できない。
- d_move()
- ファイルの移動(rename)に伴いdentryのハッシュを繋ぎかえる。
- partial_name_hash()
- キャッシュ用のhash値の計算。ファイル名だけでなく、 親dentryのアドレスも利用
- shrink_dcache_memory()
- prune_one_entry()
- shrink_dcache_parent()
- あるディレクトリ以下にある無効になってしまったdentryを解放する。
問題点など
ディレクトリエントリキャッシュの問題点は、物理デバイス上のディレクトリからファイルが削除されても、同期してdentryが削除されていない点にある。このため、随所に奇妙なアルゴリズムをいれなければならない結果となっている。
(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST1