0

我正在为 2.6.43.2-6.fc15 上的可热插拔 PCI 内存设备编写块设备驱动程序(因此 LDD3 在很多功能方面已经过时)并且我无法获取块设备 de - 注册顺利进行。移除设备后,我去拆除 gendisk 和 request_queue,但它挂在了blk_cleanup_queue(). 大概在此之前我忽略了一些与队列相关的过程,但是我看不到与我用作参考的内核树中的其他块驱动程序有任何重大的一致差异(memstick,cciss等)。在整理队列和gendisk之前我应该​​执行哪些步骤?

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

4

1 回答 1

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);
}
于 2012-11-28T14:17:24.013 回答