いろいろ確認
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);
コメントが微妙ッス。