上記dentry操作関数群だけだと、基本的にどんどんdentryの領域が増えて行く。増えすぎたエントリは、prune_dcache関数により不必要そうなものから順番に解放される。prune_dcache関数は以下の処理から呼び出される。
prune_dcache(解放するdentryの希望数)
while(dentry_unusedリストに継っている) {
dentry_unusedリストの最後のdentryをはずす
if(誰からも参照されてないなら) {
dentryの解放(prune_one_dentry関数)
}
if(解放希望数を満たした) return;
}
prune_one_dentry(dentry)
dentryのリンクを全てきる
iノードを解放(dentry_iput関数)
dentryのメモリ領域解放(d_free関数)
親ディレクトリのdentryの参照の終了(dput関数)
(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST1