Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
fsyncシステムコールを用いてファイル単位でキャッシュされているデータをディスク上に書き込むことができる。vfs sys_fsync関数でファイルディスクリプタに対応するファイル構造体と、dentryを検索し、ファイル構造体に登録されているfsyncオペレーションを呼び出す。
ext2ファイルシステムでは、 ext2_fsync関数が呼び出される。ブロックの書き込みルーチンは2回づつ呼び出される。一度目のループは純粋にI/Oを発行し、2回目のループではバッファの状態をチェックしているだけで、特に何もしていない。
ext2_fsync(ファイル構造体、dentry) for(待ち無し、待ちあり) { 直接ブロックの内容をディスクに書き込む(sync_direct関数) 間接ブロックと間接ブロックに登録されているデータブロックの内容を ディスクに書き込む(sync_indirect関数) 二段間接ブロックに継っているすべて(間接ブロック、データブロック)の 内容をディスクに書き込む(sync_dindirect関数) 三段間接ブロックに継っているすべて(間接ブロック、データブロック)の 内容をディスクに書き込む(sync_tindirect関数) } iノードをディスクに書き込む(ext2_sync_inode関数)
問題点
(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST1
[PageInfo]
LastUpdate: 2008-08-27 14:45:37, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members