Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 如何将bio拆分为多个bios?_Linux Kernel_Device Driver - Fatal编程技术网

Linux kernel 如何将bio拆分为多个bios?

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并将其设置为只包含一个扇区 提示:如果扇区大小与页面大小

我想创建一个块设备,获得一个要求n扇区的bio,并将其拆分为n个要求1扇区的bio。我使用了
bio_split
,但它不起作用,在
上出现了
BUG_

这样做有什么作用吗

如果没有,谁能帮我写一个函数来实现这一点? 也可以使用将bio拆分为4k bios的函数。

split\u bio()函数仅适用于具有单个页面的bios(当bi\u vcnt字段正好为1时)

要处理具有多个页面的bios—我怀疑您大部分时间都在处理这些页面—您必须创建新的bios并将其设置为只包含一个扇区

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


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

您是否尝试过先查看bio的合并方式?没有。我应该去哪里看,这对我有什么帮助?