从 struct bio 获取设备 dev_t

Getting device dev_t from struct bio

我一直在研究块设备 i/o 方法,方法是通过将函数指针更改为结构队列中的 make_request_fn 来尝试覆盖任何给定块设备的 make_request_fn。不过我有一个疑问,当我自己的 new make_request_fn 被调用时,struct bio 中的 struct block_device 有一个 dev_t,无论它是什么设备,minor 总是设置为 0。有什么方法可以找出 bio 将特别服务于哪个次要设备?因为我需要在结束我的函数之前弄清楚要调用哪个缓存的原始 make_request_fn。

这是因为分区。我不知道所有分区都将共享相同的 make_request_fn。我通过记下每个分区的开始和结束扇区号并将 struct bio 中的 bi_sector 映射到此来找出 bio 属于哪个分区。