在ceph存儲測試中,發現用戶態通過aio讀取到的bluestore數據crc檢驗失敗,業務懷疑是內核態返回給用戶的數據有問題,可在塊設備的bio完成回調函數中直接讀取bio對應page的數據,與用戶態讀取的數據比較,排除內核態的問題。
內核在提交IO之前是使用get_user_pages_fast獲取用戶buffer映射的page,並將page鎖在內存中防止被交換出去,用戶page映射的頁表項也不會被改變。然後用這些page組織bio的vector結構,然後提交IO,而在IO完成的回調中讀取的page是直接從該bio中獲取的page。
上述代碼中,設計proc接口aio_dev用來過濾特定塊設備的數據;
上述代碼中,用到用戶態讀寫操作的buffer,在io_submit_one函數中記錄:
首先需要在kiocb結構中,添加buf變量,