Linux Kernel(2.6)の実装に関するメモ書き

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処理 となる。

関連ページ



最終更新 2007/09/27 12:11:45 - kztomita
(2007/09/27 11:57:40 作成)
添付ファイル
generic_commit_write.png - kztomita


リンク
最近更新したページ
検索