如何将bio分成多个bios?

时间:2012-05-15 07:47:24

标签: linux-kernel device-driver

我想创建一个块设备,获取生物请求n扇区并将其拆分为n bio与1扇区。我使用bio_split但它不起作用并且到达BUG_ON

有没有做这样的功能?

如果没有人可以帮我编写一个函数来做到这一点? 具有将bio分成4k bios的功能也很好。

1 个答案:

答案 0 :(得分:3)

split_bio()函数仅适用于具有单个页面的bios(当bi_vcnt字段恰好为1时)。

要处理具有多个页面的bios - 我怀疑你在大多数时间处理这些 - 你必须创建新的BIOS并将它们设置为只包含一个扇区。

提示:如果扇区大小与页面大小相同(当前为4K),并且您的块驱动程序告诉内核提供的不小于此大小,那么您只需将每个页面从传入的bio放入新生物。如果扇区大小小于页面大小,则逻辑会稍微复杂一些。

使用bio_kmalloc分配新的BIOS并手动将数据复制到其中的内存页面。