Linuxカーネルのmake_request_fnソースコードはどこにありますか?

Linuxカーネルのmake_request_fnソースコードはどこにありますか?

Linuxカーネルコードを調べて調べたところ、私は次の機能を見つけました。make_request_fn。存在するこれリンクによると、この関数型定義は次の場所にあります。include/linux/blkdev.h、211行目:

typedef void (make_request_fn) (struct request_queue *q, struct bio *bio);

しかし、.cファイルからソースコードへの実装がどこにあるかについての言及はありません。私の質問は、この関数のソースコードはどこですか?

答え1

typedef void (make_request_fn) (struct request_queue *q, struct bio *bio);

これはない関数宣言。その定義は機能タイプ。後で同じファイルにinclude/linux/blkdev.h、299行request_queue同じ名前の構造体のフィールドを取得します。

そしてdrivers/md/bcache/request.cファイルの1140行、このフィールドには関数が割り当てられているので関数をflash_dev_make_request呼び出したと思いますmake_request_fn()が実際には呼び出しましたflash_dev_make_request()

これはカプセル化と多型を提供する本当に基本的な方法であり、Cの本当に基本的なOOPモデルです。

答え2

カーネルバージョンごとに機能的なレイアウトが異なるようです。私はLinuxカーネル4.9で作業しています。 make_request_fn は blk-core.c の blk_queue_make_request() 関数によって初期化されます。

関連情報