いろいろ確認

submit_bio() 手続きを M-t した所、定義は block/ll_rw_blk.c な模様。とりあえず、fs/mpage.c の do_mpage_readpage() 確認してみます。

ってか

カーネル 2.6 解読室の対象バージョンが分からず右往左往。とりあえず手元にある 2.6.20 でない事だけは確か。どうしたものやら、と思いつつ。

ソースツリーを

mpage_bio_submit で grep してみたら、どうやら定義と呼び出し元は mpage.c に限定されている模様。このあたりの綺麗さは流石と言わざるを得ませんな。
呼び出し元とかを grep してみて i/f のデキテる具合も見てみたくはありますが、そーゆー意味ではシステムコールなナニからの呼び出され具合とかも確認しないと微妙かも。
あと、カーネル 2.6 解読室の chapter.17 はきちっと読む必要あり。
write の部分をもう少し確認してみつつ、必要があれば output 予定とゆー事で。

も少し

fs/ext3/inode.c の ext3_readpage() 手続き。カーネル 2.6 解読室な記述とどう違うか (バージョンな差異、という意味で)、と思い見てみたら変化なし。

static int ext3_readpage(struct file *file, struct page *page)
{
	return mpage_readpage(page, ext3_get_block);
}

ここからツッコミ所満点なんですが、そのまま関数を掘る。
と、以下なカンジ (fs/mpage.c)。

/*
 * This isn't called much at all
 */
int mpage_readpage(struct page *page, get_block_t get_block)
{
	struct bio *bio = NULL;
	sector_t last_block_in_bio = 0;
	struct buffer_head map_bh;
	unsigned long first_logical_block = 0;

	clear_buffer_mapped(&map_bh);
	bio = do_mpage_readpage(bio, page, 1, &last_block_in_bio,
			&map_bh, &first_logical_block, get_block);
	if (bio)
		mpage_bio_submit(READ, bio);
	return 0;
}
EXPORT_SYMBOL(mpage_readpage);

コメントが微妙ッス。