ローカル ディスクに書き込む直前にデータをチェックする必要がある Linux カーネル モジュールに取り組んでいます。書き込むデータは、リモート ディスクからフェッチされます。したがって、フェッチからのデータがページ キャッシュに格納されていることがわかります。また、Linux には、実行中のブロック I/O 要求を管理する bio 構造体と呼ばれるデータ構造があることも知っています。
bio 構造体には、bio_vecs と呼ばれる構造体のリストが含まれています。
struct bio_vec {
/* pointer to the physical page on which this buffer resides */
struct page *bv_page;
/* the length in bytes of this buffer */
unsigned int bv_len;
/* the byte offset within the page where the buffer resides */
unsigned int bv_offset;
};
メモリ内のブロック表現は物理的に連続していない可能性があるため、これらのリストがあります。私がやりたいことは、bio_vecs のリストを使用してバッファーの各部分を取得し、それらを 1 つにまとめて、ブロックの MD5 ハッシュを取得できるようにすることです。ページへのポインター、バッファーの長さ、およびそのオフセットを使用して、バッファー内の生データを取得するにはどうすればよいですか? これには既に関数がありますか、それとも自分で作成する必要がありますか?