いろいろ確認

稼動確保

できたので確認。ざっくりベースでも良いのでメモ取らないと忘れる、と言いつつざっくりなメモ及びそれを元に整理したナニを投入。
とりあえずバージョン違うんですが、sourceforge の文書にある

ブロックデバイスファイルをオープンすると、各ファイルシステム(ext2など)はメモリiノードの初期化時(read_inode関数)に、ブロックデバイスファイル共通のファイル操作関数テーブルdef_blk_fopsをファイル構造体に登録する。

というナニを手掛りに read_inode を探してみました。

static struct super_operations ext3_sops = {

に read_inode 属性あり (fs/ext3/super.c)
設定されているのは ext3_read_inode() 手続き (fs/ext3/inode.c)。これってきちんと読んで内容精査の必要あり。とりあえず内容精査はスルーで色々確認している。
read_inode() を呼んでいるのは iget() 手続きな模様。

static inline struct inode *iget(struct super_block *sb, unsigned long ino)
{
	struct inode *inode = iget_locked(sb, ino);
	
	if (inode && (inode->i_state & I_NEW)) {
		sb->s_op->read_inode(inode);
		unlock_new_inode(inode);
	}

	return inode;
}

include/linux/fs.h にて定義

迷走中

ブロックデバイスの open は open_bdev_execl() ? # block_dev.c にて定義
grep したら fs/super.c からしか呼ばれてない (get_sb_bdev())

と思ったら

  • 上記 get_sb_bdev() 手続きは、ext3_get_sb() から呼ばれている (fs/ext3/super.c)
  • あるいは ext3_get_sb() は ext3_fs_type の get_sb 属性

この、get_sb 属性がどこで使われてるかというと fs/super.c にて vfs_kern_mount() 手続きがあり、そこから以下な形で呼び出し

	error = type->get_sb(type, flags, name, data, mnt);
	if (error < 0)
		goto out_free_secdata;

vfs_kern_mount() 手続き

同じソース (fs/super.c) の

  • do_kern_mount() 手続き
  • kern_mount() 手続き

から呼び出されている模様。上記、たぶん mount 時の手続きのはず。
blkdev_inode_operations を探してみるとどうか。# NG
仕方が無いので sourceforgeinternal24-index のデバイスファイルなナニの続きを見てみると

ブロックデバイスファイル共通のファイル操作関数テーブルdef_blk_fopsをファイル構造体に登録する。

という記述あり。探してみる。

うーん。。

  • def_blk_fops は発見 (fs/block_dev.c)
  • fs/inode.c で inode->i_fop に設定してる箇所あり。
  • init_special_inode() 手続き。これはどこから呼ばれてる?
    • ext3_read_inode() 手続き (fs/ext3/inode.c)
    • ext3_mknod() 手続き (fs/ext3/namei.c)

げ。

loop してるし。。
# メモリ i-node の初期化、なキーワードが鍵?

ちなみに

ext3_read_inode() にて

	inode->i_blksize = PAGE_SIZE;	/* This is the optimal IO size
					 * (for stat), not the fs block
					 * size */  
  • みたいなナニがある。でもこれって領域確保じゃないのか。。
  • inode 構造体の属性チェキが必要かも。(i_blocks 属性?)

とりあえず

ばたばたしててメモも取れてない事が判明。割り込み多いのを言い訳にしたくはないんですが、もう少し腰をスエてきちんと読まないと駄目だ。(とほほほ

とはいえ結局

デバイスファイルを開いた時のナニ、が全然整理できてません。迷走した割に実りナシ。