我正在为2.6.43.2-6.fc15上的一个可热插拔的PCI存储设备编写块设备驱动程序(因此LDD3在很多功能方面都是过时的),并且我在顺利完成块设备注销时遇到了麻烦。当设备被移除时,我去拆掉gendisk和request_queue,但它挂在blk_cleanup_queue()上。在此之前,我可能忽略了一些与队列相关的过程,但我看不到与我正在参考的内核树(memstick、cciss等)中的其他块驱动程序有任何主要的一致区别。在清理队列和gendisk之前,我应该执行哪些步骤?
我在block_ops中实现了.open、.release、.ioctl以及附加了blk_init_queue(mydev_request, &mydev->lock)的mydev_request(struct request_queue *q),但我不确定在请求发生或注销块设备时如何整理队列。
发布于 2012-11-28 22:17:24
这是因为您没有结束从队列中获取的请求。要修复此问题,请按如下方式结束请求:
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);
}https://stackoverflow.com/questions/13564091
复制相似问题