主なdentry操作関数

  • dget()
    • dentry領域の参照数を一つ増やす。
  • dput()
    • dentry領域の参照数を一つ減らす。
    • 参照数が0で、かつ既にハッシュに無ければ、そのdentry領域を削除する。
    • 参照数が0で、ハッシュに残っていれば、dentry_unusedリストに リンクする(解放候補のリスト)。
  • d_alloc()
    • dentry領域を確保する。
  • d_free()
    • dentry領域を解放する(削除する)。
  • d_add()
    • dentryとiノードをリンクし、dentryをハッシュに登録する。
  • d_rehash()
    • dentryをハッシュに登録する。
  • d_drop()
    • dentryをハッシュから外す。
  • d_delete()
    • dentryを無効にする。iノードとのリンクを切り解放する (dentry_iput関数)。ただし、ハッシュにはリンクしたままとする。
  • dentry_iput()
    • dentryとリンクされているiノードとのリンクを切り、iノードを解放する(iput関数)
  • d_instantiate()
    • dentryとiノードのリンクを行う
  • 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秒 JST
1