[[PageNavi(internal24-navi)]]
{{{ comment
h2w-title:dentryのメモリ領域の強制解放
}}}
= dentryのメモリ領域の強制解放 = #SECTION03540000000000000000
上記dentry操作関数群だけだと、基本的にどんどんdentryの領域が増えて行く。増えすぎたエントリは、prune_dcache関数により不必要そうなものから順番に解放される。prune_dcache関数は以下の処理から呼び出される。
* 空きメモリ領域が不足した時、try_to_free_pages関数から shrink_dcache_memory関数経由で呼び出される。 iノード領域とdentryは必ずペアで 管理されているため、iノード領域を解放するには、dentryの 解放が必要不可欠である。
* ディレクトリのdentry削除時に、ゴミの子ファイルの dentryが残っていた場合、select_parent関数で ゴミdentryをdentry_unusedリストの最後に繋ぎ、 prune_dcache関数を呼び出す。(shrink_dcache_parent関数) ファイルの削除時にdentryをきちんと整理していない為、 面倒な処理が必要となっている。
{{{
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 [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1
[[PageNavi(internal24-navi)]]