3

nセクターのリクエストでバイオを取得し、それを1セクターのnバイオに分割するブロックデバイスを作成したい。使っbio_splitてたけど動かなくて届いBUG_ONた。

そのようなことをする機能はありますか?

それを行う関数を書くのを手伝ってくれる人がいない場合は?また、バイオを4kバイオに分割する機能があればいいです。

4

1 に答える 1

4

split_bio() 関数は、単一ページの BIOS でのみ機能します (bi_vcnt フィールドが正確に 1 の場合)。

複数のページを持つ BIOS を処理するには (ほとんどの場合、これらのページを処理していると思います)、新しい BIOS を作成し、1 つのセクターのみが含まれるように設定する必要があります。

ヒント: セクター サイズがページ サイズ (現在は 4K) と同じであり、ブロック ドライバーがカーネルにこのサイズ以上のサイズを提供するように指示する場合、着信バイオから新しいバイオに各ページを配置するだけで済みます。セクター サイズがページ サイズより小さい場合、ロジックはもう少し複雑になります。

bio_kmalloc を使用して新しい bios を割り当て、データをそれらのメモリ ページに手動でコピーします。

于 2012-05-17T09:25:29.950 に答える