【发布时间】:2011-07-19 08:16:53
【问题描述】:
在 Xen 设置中,来自来宾 VM 的 IO 访问通过一个名为 dom0 的特权域,它只是一个修改过的 Linux 内核,它可以调用来自和调用 XEN 管理程序。对于块 IO,它们有一个拆分驱动模型,其前端在来宾 VM 中,驱动程序的后端在 domain0 中。后端只是创建一个“bio”结构并调用 submit_bio(),就像在传统的 linux 块驱动程序代码中一样。
我的目标是检查写入磁盘的数据是否有任何问题(丢失的数据、静默损坏的写入、错误定向的写入等)。所以我需要读取写入磁盘的数据,并将其与缓存上的数据副本进行比较(这是一个常见的磁盘功能,称为“写后读”)。我的问题是,不能从我的后端驱动程序级别调用 __bread() 吗?调用 __bread 时内核崩溃。有人能理解这是什么原因吗?另外,如果这不可能,还有什么其他方法可以从驱动程序下半部分的磁盘读取特定数据块?
我可以拦截和克隆写入的 bio 结构,并在我的新 bio 中将操作更改为 read 并再次调用 submit_bio() 吗?我这样做了,但是 submit_bio() 的完成回调返回的 bio 结构中的扇区号是一些随机值,而不是我发送的那些..
谢谢。
【问题讨论】:
-
你完成项目了吗?
-
你完成项目了吗?
标签: linux device-driver disk xen