generic_commit_write()
1. 概要
ファイルWrite時のcommit時に使われるgeneric_commit_write()関数の解説。
本関数は、様々なファイルシステムのcommit_write処理で使用されている。Ext2FSではaddress_space_operationsであるext2_aops.commit_writeに直接登録されている。Ext3ではaddress_space_operationsのcommit_writeハンドラの中から使用されている。
2. generic_commit_write()の動作
generic_commit_write()のプロトタイプは以下のとおり。
generic_commit_write(struct file *file, struct page *page, unsigned from, unsigned to)
fileは書き込み対象のファイルで、pageはデータをWriteしたページキャッシュ(*1)、from,toは書き込んだ領域(ファイル内でのOffset)を表す。
generic_commit_write()はWriteした領域(from〜to)に対応するBufferをDirty状態にし(BH_Dirtyをセット)、また対応するページキャッシュもDirty状態にしてページキャッシュ上の更新されたデータが後でディスクに書き込まれるようにする(図1)。
図1 BufferとPageのDirty化
(*1) ページキャッシュへのデータへの書き込みはcommit_write前に行われる。データの書き込み手順としては prepare_write処理 → PageCacheへのデータ書き込み → commit_write処理 となる。