如何将SCSI请求放入Linux内核的队列中?

如何将SCSI请求放入Linux内核的队列中?,c,linux,linux-kernel,scsi,C,Linux,Linux Kernel,Scsi,我尝试创建一个Linux内核模块来过滤SCSI请求。想法非常简单:我通过调用函数Scsi\u host\u lookup()枚举所有Scsi\u主机,并修改相应的指针 host->hostt->queuecommand. 这个钩子有用 但是,在分派scsi请求的过程中,我需要做一些复杂的工作。我不能在我的hook函数中立即执行它,因为它是在不支持中断的上下文中调用的 我已经尝试过以下方法:我创建了一个工作队列,在hook函数中,我将scsi请求放入该队列,然后返回零。在工作队列函

我尝试创建一个Linux内核模块来过滤SCSI请求。想法非常简单:我通过调用函数
Scsi\u host\u lookup()
枚举所有Scsi\u主机,并修改相应的指针

host->hostt->queuecommand. 
这个钩子有用

但是,在分派scsi请求的过程中,我需要做一些复杂的工作。我不能在我的hook函数中立即执行它,因为它是在不支持中断的上下文中调用的

我已经尝试过以下方法:我创建了一个工作队列,在hook函数中,我将scsi请求放入该队列,然后返回零。在工作队列函数中,我调用了原始的
host->host->queuecommand
函数。系统没有崩溃,但被卡住了。我认为这是因为我在hook函数中不断返回零

你能帮我吗