Xen 설정에서 게스트 VM의 IO 액세스는 XEN 하이퍼 바이저와의 호출이있는 수정 된 Linux 커널 인 dom0이라는 권한있는 도메인을 통과합니다. 블록 IO의 경우 프런트 엔드가 게스트 VM에 있고 드라이버의 백엔드가 domain0에있는 분할 드라이버 모델을 가지고 있습니다. 백엔드는 '바이오'구조를 만들고 전통적인 리눅스 블록 드라이버 코드에서와 같이 submit_bio()를 호출합니다.장치 드라이버의 아래쪽 절반에서 디스크 읽기를 실행
내 목표는 디스크에 기록 된 데이터에 문제가 있는지 (손실 된 데이터, 자동으로 손상된 쓰기, 잘못 지시 된 쓰기 등) 확인하는 것입니다. 따라서 디스크에 기록 된 데이터를 읽고 캐시의 데이터 복사본과 비교해야합니다.이 데이터는 '읽기 후 쓰기'라는 공통 디스크 기능입니다. 내 질문은, 내 백엔드 드라이버 수준에서 __bread()를 호출 할 수 있습니까? __bread가 호출 될 때 커널이 충돌합니다. 아무도 이유를 이해할 수 있습니까? 또한 이것이 가능하지 않은 경우, 드라이버의 하단에서 디스크의 특정 데이터 블록을 읽는 다른 방법은 무엇입니까?
글의 바이오 구조를 가로 채고 복제 할 수 있으며 새로운 바이오에서 읽기로 작업을 변경하고 submit_bio()를 다시 호출 할 수 있습니까? 그랬지 만, submit_bio()의 완료 콜백에 의해 반환되는 바이오 구조의 섹터 번호는 내가 보낸 것이 아닌 임의의 값입니다 ..
고마워.