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 行,这个字段被分配了 function flash_dev_make_request,这让你以为你调用了 function make_request_fn(),但实际上你调用了flash_dev_make_request()

它是提供封装和多态性的真正基本方法,也是 C 语言中真正基本的 OOP 模型。

答案2

看来不同的内核版本有不同的功能布局。我正在研究 Linux 内核 4.9。 make_request_fn由blk-core.c中的blk_queue_make_request()函数初始化。

相关内容