nセクターのリクエストでバイオを取得し、それを1セクターのnバイオに分割するブロックデバイスを作成したい。使っbio_split
てたけど動かなくて届いBUG_ON
た。
そのようなことをする機能はありますか?
それを行う関数を書くのを手伝ってくれる人がいない場合は?また、バイオを4kバイオに分割する機能があればいいです。
nセクターのリクエストでバイオを取得し、それを1セクターのnバイオに分割するブロックデバイスを作成したい。使っbio_split
てたけど動かなくて届いBUG_ON
た。
そのようなことをする機能はありますか?
それを行う関数を書くのを手伝ってくれる人がいない場合は?また、バイオを4kバイオに分割する機能があればいいです。
split_bio() 関数は、単一ページの BIOS でのみ機能します (bi_vcnt フィールドが正確に 1 の場合)。
複数のページを持つ BIOS を処理するには (ほとんどの場合、これらのページを処理していると思います)、新しい BIOS を作成し、1 つのセクターのみが含まれるように設定する必要があります。
ヒント: セクター サイズがページ サイズ (現在は 4K) と同じであり、ブロック ドライバーがカーネルにこのサイズ以上のサイズを提供するように指示する場合、着信バイオから新しいバイオに各ページを配置するだけで済みます。セクター サイズがページ サイズより小さい場合、ロジックはもう少し複雑になります。
bio_kmalloc を使用して新しい bios を割り当て、データをそれらのメモリ ページに手動でコピーします。