tarfs について (8)

Documentation/vfs.txt を眺める。色々見てて struct inode 型に関する解説はどこか分からんぞ、と言いつつ Linux 2.6 カーネル解読室の VFS の章を確認。
直前エントリのナニを基に確認

  • 通常ファイルだったら i_fop と i_mapping な属性に値をセット
    • i_fop には tarfs_file_operations のポインタをセット
    • i_mapping には aops という属性に tarfs_apos のポインタをセット
  • ディレクトリだったら i_op と i_fop な属性に値をセット
    • i_op には tarfs_dir_inode_operations のポインタをセット
    • i_fop には tarfs_dir_operations のポインタをセット
  • symlink だったら i_op な属性に値をセット
    • i_op には tarfs_symlink_inode_operations のポインタをセット

ちなみに Linux 2.6 カーネル解読室の struct inode 型の解説によると

  • i_op メンバは inode オペレーション (struct inode_operations *)
  • i_fop メンバは file オペレーション (struct file_operations *)
  • i_mapping メンバは address_space 構造体ポインタ (struct address_space *)

との事。ちなみに address_space オブジェクトと inode オブジェクトは一対一との事。
以下、自分メモ。

tarfs_file_operations

この変数は struct file_operations 型です。定義は file.c で以下

struct file_operations tarfs_file_operations = {
	llseek:		tarfs_file_lseek,
	read:		generic_file_read,
	mmap:		generic_file_mmap,
	open:		tarfs_open_file,
};

tarfs_aops

この変数は struct address_space_operations 型です。定義は inode.c で以下

struct address_space_operations tarfs_aops = {
	readpage: tarfs_readpage,
};

tarfs_dir_inode_operations

この変数は struct inode_operations 型です。定義は namei.c で以下

struct inode_operations tarfs_dir_inode_operations = {
  lookup:	tarfs_lookup,
};

tarfs_dir_operations

この変数は struct file_operations 型です。定義は dir.c で以下

struct file_operations tarfs_dir_operations = {
	read:		generic_read_dir,	/* just put error */
	readdir:	tarfs_readdir,
};

tarfs_symlink_inode_operations

この変数は struct inode_operations 型です。定義は inode.c で以下

struct inode_operations tarfs_symlink_inode_operations = {
	readlink:	tarfs_readlink,
	follow_link:	tarfs_follow_link,
};

そろそろ力尽きます

上記構造体なメンバで代入されているはずの関数ポインタの手続きがナニ。