以下にその大雑把なアルゴリズムを示す。アルゴリズム中に付いている◆印は同期書き込みを、◇印は遅延書き込みを表す。v2.2とことなりこの処理中で確保したブロックに対応するバッファのクリアを行わないようになった。
ext2_new_block(iノード, ヒント値, ....)
(上記アルゴリズムを用いて、空きブロックを検索)
候補のブロックグループのブロックビットマップを読み込む(load_block_bitmap関数)
ブロックビットマップ内のビットを予約する。
プリアロケートの処理(後述のプリアロケート機能に関する説明参照)
◇ブロックビットマップの遅延書き込み要求(mark_buffer_dirty関数)
if(SYNCマウント?) {
◆ブロックビットマップをディスクに書き込む(ll_rw_block関数、wait_on_buffer関数)
}
ブロックグループディスクリプタが管理するフリーブロック数を1減らす
◇ブロックグループディスクリプタの属するバッファを遅延書き込み要求(mark_buffer_dirty)
スーパブロックが管理するフリーブロック数を1減らす
◇スーパブロックを遅延書き込み要求(mark_buffer_dirty)
データブロックの解放は連続したブロックをまとめて行う。
ext2_free_blocks(iノード, ブロック番号, ブロック数)
ブロックが属するブロックビットマップを読み込む(load_block_bitmap関数)
ブロックビットマップ内のビットを解放する
ブロックグループディスクリプタが管理するフリーブロック数を解放要求分増やす
◇ブロックグループディスクリプタの属するバッファを遅延書き込み要求(mark_buffer_dirty)
スーパブロックが管理するフリーブロック数を1増やす
◇スーパブロックを遅延書き込み要求(mark_buffer_dirty)
if(SYNCマウント?) {
◆ブロックビットマップをディスクに書き込む(ll_rw_block関数、wait_on_buffer関数)
}
(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST1