首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >blk_cleanup_queue()在数据块设备注销时不返回

blk_cleanup_queue()在数据块设备注销时不返回
EN

Stack Overflow用户
提问于 2012-11-26 19:39:00
回答 1查看 164关注 0票数 0

我正在为2.6.43.2-6.fc15上的一个可热插拔的PCI存储设备编写块设备驱动程序(因此LDD3在很多功能方面都是过时的),并且我在顺利完成块设备注销时遇到了麻烦。当设备被移除时,我去拆掉gendisk和request_queue,但它挂在blk_cleanup_queue()上。在此之前,我可能忽略了一些与队列相关的过程,但我看不到与我正在参考的内核树(memstickcciss等)中的其他块驱动程序有任何主要的一致区别。在清理队列和gendisk之前,我应该执行哪些步骤?

我在block_ops中实现了.open.release.ioctl以及附加了blk_init_queue(mydev_request, &mydev->lock)mydev_request(struct request_queue *q),但我不确定在请求发生或注销块设备时如何整理队列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-28 22:17:24

这是因为您没有结束从队列中获取的请求。要修复此问题,请按如下方式结束请求:

代码语言:javascript
复制
while ((req = blk_fetch_request(q)) != NULL )
{
    res = mydev_submit_request_sg(mydev, req);

    if (res)
        __blk_end_request_all(req, res);
    else
        __blk_end_request_cur (req, res);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13564091

复制
相关文章

相似问题

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