我正在为2.6.43.2-6.fc15上的热插拔PCI内存设备编写一个块设备驱动程序(因此LDD3已经过时了很多功能)而且我无法获得阻止设备取消注册顺利进行。删除设备后,我会拆除gendisk和request_queue,但它会挂起blk_cleanup_queue()
。据推测,在此之前我忽略了一些与队列相关的进程,但我看不出与我用于引用的内核树中的其他块驱动程序存在任何重大的一致差异(memstick
,{{1等等)。在整理队列和gendisk之前我应该执行哪些步骤?
我正在cciss
中实施.open
,.release
,.ioctl
以及block_ops
附加的mydev_request(struct request_queue *q)
,但是我我不确定在请求发生时或取消注册块设备时如何整理队列。
答案 0 :(得分:0)
这是因为没有结束您从队列中获取的请求。要解决此问题,请按以下步骤结束请求:
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);
}