itrunc
ストレージ領域のブロック番号をフリーリストに戻す
- ファイルサイズ 0
- inode.i_addrも0
- ただしデータは上書きされるまでストレージ領域に残る
コード
itruncはあいとらんく、brelseはびーりりーすと読む
- itrunc() ken/iget.c
- 引数はipの配列
- 二重参照のときは1つずつなめてfree()でフリーリストに戻す
- 最後にフラグをたてたりi_addrも0にしたりする
- brelse…breadしたときに生成されるバッファを解放する
- だーてぃ
ブロックデバイスの割り当て
- inodeとブロックの管理はそれぞれスーパーブロックのinodeフリーリストとストレージフリーリストで管理
- バッファじゃなくてブロックのはなし
- cの配列は要素数を調べるメソッドとかないので、格納数を別変数でもってる
ialloc()
inode領域の未割り当てinodeを割り当てる関数
filsysは「ふぁいるしす」と読む
- filsys.s_ninodeからfilsys.s_inodeの要素をとり、デクリメントしていく(スタック構造のよう)
- 「割り当て」て、「減らし」ていく
- filsys.s_inode[]が空になったら、というか空だったら、再度補充していく
コード
- ialloc() (ken/alloc.c)
- 引数はデバイス番号
- filsys構造体の説明はP263
- 未使用で、使用できるinodeを返す
- forで0クリア
- 空のリストに100補充する
- 補充終わったからループを抜ける
- メモリ上のinodeとディスク上のinodeは微妙に構造体が違う
- インデントがおかしいし、breakの使い方も変
- 黒魔術がふんだんに使われている
その他
- ブロックデバイス
- オフセット