use*_*878 5 linux storage linux-device-driver linux-kernel block-device
我正在研究Linux内核版本2.6.39.1,并正在开发一个块设备驱动程序.在这方面,我想将多个struct bios合并为一个struct request,然后将其添加到request_queue设备驱动程序进行处理,即 - scsi_request_fn().
我尝试使用->bi_next字段struct bio来链接struct bio我编写的多个s,从而创建一个struct bios 的链接列表.当我打电话submit_bio()提交生物块设备层的I/O,这 BUG_ON()是触发,因为代码预计bio->bi_next要NULL.
有没有办法在将几个struct bios struct request发送到较低层进行维护之前将它们链接成一个?
感谢您的回复,@ctuffli。我决定使用与此处描述的结构类似的结构。基本上,我分配 a struct packet_data,其中包含指向应struct bio合并形成一个 single 的所有 s 的指针struct bio(以及稍后的一个 single struct request)。此外,我还在该文件中存储了一些驱动程序相关信息struct packet_data。接下来,我分配一个新的struct bio(我们称之为“merged_bio”),复制原始 BIO 列表中的所有页面,然后merged_bio->bi_private指向struct packet_data. 最后一个 hack 将允许我跟踪原始 BIO 列表,并且在成功传输bio_endio()后调用结束所有单独 BIO 上的 I/O 。merged_bio
不确定这是否是最明智的方法,但它达到了我的预期!:^)
| 归档时间: |
|
| 查看次数: |
840 次 |
| 最近记录: |