mpage_writepages()
Rev.2を表示中。最新版はこちら。
1. 概要
WriteBack処理の中で呼び出されるmpage_writepages()のメモ。呼出元のWriteBack処理については「WriteBack処理」参照。
mpage_writepages()はページキャッシュからDirtyPageを取り出し、Write I/Oを開始する。
2. 処理の流れ
2.1 mpage_writepages()
mpage_writepags()のプロトタイプは以下のとおり。
プロトタイプ: int mpage_writepages(struct address_space *mapping,
struct writeback_control *wbc, get_block_t get_block)
mapping: WriteBack対象のページキャッシュ(mapping)
wbc: WriteBack処理管理情報
get_block: get_blockハンドラ
struct writeback_control *wbc, get_block_t get_block)
mapping: WriteBack対象のページキャッシュ(mapping)
wbc: WriteBack処理管理情報
get_block: get_blockハンドラ
mpage_writepagesはmappingで渡されたページキャッシュからDirtyページを取り出し、Write I/Oを発行していく。
mpage_writepages()の処理概要
: while (!done && (index <= end) && (nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, PAGECACHE_TAG_DIRTY, min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1))) { /* * ページキャッシュ(mapping)からDirtyページを少しずつ取得して処理していく */ /* 取得したDirtyPageを順番にWriteBackしていく */ for (i = 0; i < nr_pages; i++) { : if (writepage) { /* generic_writepages()マクロ経由で呼び出された場合 *(writepagesハンドラが未定義のファイルシステムの場合) */ ret = (*writepage)(page, wbc); } else { bio = __mpage_writepage(bio, page, get_block, &last_block_in_bio, &ret, wbc, page->mapping->a_ops->writepage); } : } } if (bio) mpage_bio_submit(WRITE, bio)