ext3_fill_super() 手続き (5)

ちょっと元に戻ってみる。そもそも fs/super.c にて定義されてる get_sb_bdev() を掘じくり返してるのは標題の手続きが渡されている ext3_get_sb() から呼び出されているのが get_sb_bdev() だから、ですね。
ちなみに、冗長かと思われますが get_sb() 手続き呼び出しに至る route としては

do_kern_mount()#fs/super.c
  vfs_kern_mount()#fs/super.c
    get_sb()

または

kern_mount()#fs/super.c
  vfs_kern_mount()#fs/super.c
    get_sb()

な模様。do_kern_mount() とかって namespace.c あたりからしか呼び出されていない模様。逆に kern_mount() 方面は若干微妙かも。
で、3rd Edition の 12.4 あたりに do_mount() 手続きが do_kern_mount() を呼び出す件の記述があるな。

閑話休題

get_sb_bdev() 手続きからの open_bdev_excl() の呼び出しは以下なカンジ。

	bdev = open_bdev_excl(dev_name, flags, fs_type);

この手続きは 3rd Edition によれば_dev_name で指定されたデバイスファイル名を持つブロック型デバイスをオープンします_とあります。この_オープンされた状態_というのはどういった状態を指すのか、という事をきちんと確認する必要あり。

と、いう事で

open_bdev_excl() に戻るんだな。ここ、何をしてるのか俯瞰的な確認が必要と見てます。しかし具体的にどうしたものやら。
余裕があれば追記予定です。

追記

lookup_bdev() 関連にてポイントをいくつか控え。

  • path_lookup() 手続きは第三引数で渡す nameidata なポインタにオブジェクトがセット
    • dentry と mnt メンバが指定したパス名に対応するファイルを表現
    • path_lookup() で確保された dentry と vfsmount なオブジェクトは path_release() が呼び出されるまで解放されては駄目

3rd Edition の 12.5 はソース見つつ、な確認必要かと。