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

mpage_writepages()


Rev.3を表示中。最新版はこちら

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ハンドラ

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)


2.2 __mpage_writepage

編集中

関連ページ


最終更新 2008/01/13 19:06:18 - kztomita
(2008/01/13 18:41:21 作成)
添付ファイル
contiguas.png - kztomita
uncontiguas.png - kztomita


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