Linux kernel 如何将bio拆分为多个bios?
我想创建一个块设备,获得一个要求n扇区的bio,并将其拆分为n个要求1扇区的bio。我使用了Linux kernel 如何将bio拆分为多个bios?,linux-kernel,device-driver,Linux Kernel,Device Driver,我想创建一个块设备,获得一个要求n扇区的bio,并将其拆分为n个要求1扇区的bio。我使用了bio_split,但它不起作用,在上出现了BUG_ 这样做有什么作用吗 如果没有,谁能帮我写一个函数来实现这一点? 也可以使用将bio拆分为4k bios的函数。split\u bio()函数仅适用于具有单个页面的bios(当bi\u vcnt字段正好为1时) 要处理具有多个页面的bios—我怀疑您大部分时间都在处理这些页面—您必须创建新的bios并将其设置为只包含一个扇区 提示:如果扇区大小与页面大小
bio_split
,但它不起作用,在上出现了BUG_
这样做有什么作用吗
如果没有,谁能帮我写一个函数来实现这一点?
也可以使用将bio拆分为4k bios的函数。split\u bio()函数仅适用于具有单个页面的bios(当bi\u vcnt字段正好为1时)
要处理具有多个页面的bios—我怀疑您大部分时间都在处理这些页面—您必须创建新的bios并将其设置为只包含一个扇区
提示:如果扇区大小与页面大小相同(当前为4K),并且块驱动程序告诉内核提供不小于此大小的数据,那么您只需将传入bio中的每个页面放入新bio。如果扇区大小小于页面大小,则逻辑将稍微复杂一些
使用bio_kmalloc分配新的bios并手动将数据复制到其中的内存页。您是否尝试过先查看bio的合并方式?没有。我应该去哪里看,这对我有什么帮助?