Show page source of internal24-151-fsyncシステムコール #25189

[[PageNavi(internal24-navi)]]

{{{ comment
h2w-title:fsyncシステムコール
}}}
 

= fsyncシステムコール = #SECTION0310150000000000000000

fsyncシステムコールを用いてファイル単位でキャッシュされているデータをディスク上に書き込むことができる。vfs sys_fsync関数でファイルディスクリプタに対応するファイル構造体と、dentryを検索し、ファイル構造体に登録されているfsyncオペレーションを呼び出す。

ext2ファイルシステムでは、 ext2_sync_file関数が呼び出される。ブロックの書き込みルーチンは2回づつ呼び出される。一度目のループは純粋にI/Oを発行し、2回目のループではバッファの状態をチェックしているだけで、特に何もしていない。

{{{
   ext2_sync_file(ファイル構造体、dentry)
      if (シンボリックリンクファイルでパス名が短いとき) {
           iノードをディスクに書き込む(ext2_sync_inode関数)
           return;
      }
      データ域の書き込み(generic_buffer_fdatasync関数)
      for(待ち無し、待ちあり) {
           間接ブロックをディスクに書き込む(sync_indirect関数)
           二段間接ブロックをディスクに書き込む(sync_dindirect関数)
           三段間接ブロックをディスクに書き込む(sync_tindirect関数)
      }
      iノードをディスクに書き込む(ext2_sync_inode関数)
}}}

'''問題点など'''

  1.  現在の調査対象の版(v2.2.5)では、sys_fdatasyncも完全に sys_fsyncと全く同じ動作をする。性能上のメリットは無い。

----

''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1

[[PageNavi(internal24-navi)]]