ext3_fill_super() 手続き (6)

なんとなく open_bdev_excl() の挙動を類推してみる。
ざっくりベースで控えとくと

  • lookup_bdev() で block_device なオブジェクト取得
    • path から inode を取得して、そこから block_device なオブジェクトを取得または生成 (?) してそれを戻しているように見えます。
    • てか、あまりきちんと追い掛けれてませんね。
    • struct bdev_inode 型なオブジェクトはおそらく insmod な時点とかデバイスが認識された時点で生成されるものと類推
      • 同時に block_device なオブジェクトも生成されるのか
      • 基本的に lookup の中で新たにオブジェクトが生成されているようには見えない
  • blkdev_get() では do_open() でハマり中

とほほ。open された状態ってのはざっくりで言うと mount しようとしている特殊ファイルな inode とペアになってる block_device オブジェクトの状態をその時点のカーネルの状態とか要求に応じて変更する、というカンジなのでしょうか。

ざっくり派には

かなりキツいですな。ただ、lookup な部分で相当チェック漏れがあるので、きっちり確認する必要があるのか、どうなのか。
とりあえず、open された状態がどうなのか、が分かれば良いのだよな。であればざっくり派としては_適切な block_device オブジェクトが戻される_で良いといえば良い (を
でも sget() に移る前にもう少しきちっと読む必要ありだな。