在Xen設置中,來自訪客虛擬機的IO訪問會通過名爲dom0的特權域,該域只是一個經過修改的Linux內核,該內核具有來自XEN管理程序的呼叫和來自XEN管理程序的呼叫。對於塊IO,它們有一個拆分驅動程序模型,其前端位於來賓虛擬機中,驅動程序的後端位於域0中。後端只是創建一個'生物'結構並調用submit_bio(),就像在傳統的linux塊驅動代碼中一樣。發佈從設備驅動程序的下半部分讀取的磁盤
我的目標是檢查寫入磁盤的數據是否有問題(數據丟失,寫入失敗,錯誤寫入等)。所以我需要讀取寫入磁盤的數據,並將其與數據的緩存副本進行比較(這是一種常見的磁盤功能,稱爲「讀後寫」)。我的問題是,是不是可以從我的後端驅動程序級別調用__bread()?當__bread被調用時,內核會崩潰。任何人都可以理解這個原因嗎?另外,如果這是不可能的,還有什麼其他方法可以從驅動器的下半部分讀取磁盤上的特定數據塊?
我可以攔截並克隆寫入的生物結構,並改變我的新生物中讀取的操作並再次調用submit_bio()?我做到了,但生物結構中由submit_bio()的完成回調返回的扇區號是一些隨機值,而不是我發送的。
謝謝。