我想创建一个块设备,获取生物请求n扇区并将其拆分为n bio与1扇区。我使用bio_split
但它不起作用并且到达BUG_ON
。
有没有做这样的功能?
如果没有人可以帮我编写一个函数来做到这一点? 具有将bio分成4k bios的功能也很好。
答案 0 :(得分:3)
split_bio()函数仅适用于具有单个页面的bios(当bi_vcnt字段恰好为1时)。
要处理具有多个页面的bios - 我怀疑你在大多数时间处理这些 - 你必须创建新的BIOS并将它们设置为只包含一个扇区。
提示:如果扇区大小与页面大小相同(当前为4K),并且您的块驱动程序告诉内核提供的不小于此大小,那么您只需将每个页面从传入的bio放入新生物。如果扇区大小小于页面大小,则逻辑会稍微复杂一些。
使用bio_kmalloc分配新的BIOS并手动将数据复制到其中的内存页面。