【问题标题】:How to split bio into multiple bios?如何将bio拆分为多个bio?
【发布时间】:2013-02-10 00:55:48
【问题描述】:

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

有什么功能可以做这样的事情吗?

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

【问题讨论】:

  • 你有没有试过先看看 bio 是如何合并的?
  • 不,我没有。我应该去哪里看,这对我有什么帮助?

标签: linux-kernel device-driver


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 2018-04-20
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2013-07-17
    相关资源
    最近更新 更多