我正在使用内核版本为4.4.2的SLES 12 SP2上的3.x内核构建我的SLES 12驱动程序(块设备驱动程序)。现在我面临的问题很少:
struct bvec_merge_data
在include / linux / blkdev.h
中的内核4.3.0中不可用 struct bvec_merge_data {
struct block_device * bi_bdev;
sector_t bi_sector;
unsigned bi_size;
unsigned long bi_rw;
};
从4.2.8开始,此功能指针不存在。 4.3或更高版本中提供了可能的替代方法。
typedef int(merge_bvec_fn)(struct request_queue *,struct bvec_merge_data *, struct bio_vec *);
unrep_rq_fn * unprep_rq_fn;
merge_bvec_fn * merge_bvec_fn;
我知道在哪里可以查找这些更改以及其他任何替代方案吗?
答案 0 :(得分:1)
这些答案的最佳位置是内核源码的git日志。提供-S开关将在diff内容中搜索。提供-G将使用正则表达式。
在这种情况下,运行git log -S "bvec_merge_data"
会显示与此结构相关的更改的信息,并通过关联显示merge_bvec_fn
方法。这是关于完整删除结构bvec_merge_data
的顶级消息的快照:
commit 8ae126660fddbeebb9251a174e6fa45b6ad8f932作者:Kent Overstreet日期:星期一4月27日23:48:34 2015 -0700
block: kill merge_bvec_fn() completely As generic_make_request() is now able to handle arbitrarily sized bios, it's no longer necessary for each individual block driver to define its own ->merge_bvec_fn() callback. Remove every invocation completely.
此前的其他提交消息显示了它的构建,这可能是对您的问题的一个很好的逐步解释。
希望有所帮助:)