首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Linux,warning:__get_request: dev 8:0:请求aux数据分配失败,丢失可能会被干扰

Linux,warning:__get_request: dev 8:0:请求aux数据分配失败,丢失可能会被干扰
EN

Stack Overflow用户
提问于 2018-11-13 22:12:34
回答 1查看 309关注 0票数 1

我使用测试代码从我自己的内核模块提交BIO:

如果我使用submit_bio(&bio) -

  • ,所有工作都很好,如果我使用bdev->bd_queue->make_request_fn(bdev->bd_queue,&bio),那么进入dmesg:

__get_request: dev 8:0:请求aux数据分配失败,丢失的数据可能是disturbed

我的主要目标是向未调用submit_bio()例程的堆栈式设备驱动程序提交BIOs。有什么想法和建议吗?

EN

回答 1

Stack Overflow用户

发布于 2019-01-04 03:43:09

我们的ZFS加密界的英雄Tom Caputi解决了这个问题。

基本上,调度器期望在运行请求的线程的任务结构中有一个io上下文。

您将在这里看到,io上下文是在generic_make_request_checks()中创建的。

https://elixir.bootlin.com/linux/latest/source/block/blk-core.c#L2323

如果从来没有为运行您的请求的任务结构创建它,您将看到消息"io sched可能会被干扰“。如果有的话,这是一条糟糕的消息。“没有为这个任务分配Scheduler上下文”会让这个问题变得更加明显。

我不是像tom那样的内核专家,但基本上是这样做的:bdev->bd_queue->make_request_fn你的请求是由另一个线程处理的,这个线程没有分配上下文。

现在create_io_context没有被导出,所以你不能直接调用它。

但如果你把这个叫做:

https://elixir.bootlin.com/linux/latest/source/block/blk-ioc.c#L319

其被导出,io上下文将被分配不再警告消息。我想会有一些io的改进,因为调度器需要处理上下文。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53282940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档