データ書き込みの流れ
メモ
- sys_write()
- fs/read_write.c
- struct fileと現在のファイルポインタが指している位置を取得してvfs_write()を呼び出す
- vfs_write()
- fs/read_write.c
- 操作関するチェックをしてfile_operationsのwrite()を呼び出す
- generic_file_write()
- mm/filemap.c
- デフォルトのファイル書き込み操作関数
- struct i_node を取得、ロックしてgeneric_file_write_nolock()を呼び出す
- generic_file_write_nolock()
- mm/filemap.c
- struct kiocbを初期化してgeneric_file_aio_write_nolock()を呼び出す
- generic_file_aio_write_nolock()
- mm/filemap.c
- O_DIRECTが指定されていない場合
- 書き込む長さをcount変数に入れる
- struct address_space_operatoinsのprepare_write()を呼び出す
- filemap_copy_from_user()を呼び出す
- struct address_space_operatoinsのcommit_write()を呼び出す
- count -= 書き込まれた長さ
- countが0になるまで繰り返し
- ページアウト処理
- mpage_writepages()
- fs/mpage.c
- pagevec_lookup_tag()を呼び出しstruct pageを取得する
- struct address_space_operationsのwritepage()を呼び出す