阅读:1475回复:10
zdhe 请现身,scsi大虾们看过来
我前一段时间下载了你很久以前贴的有关scsi ramdisk的驱动,之后我希望将srb放入链表中处理,我使用了一个线程做处理的事情,但在线程中我处理时却发现命令处理timeout,同时系统发出VScsiResetBuf指令,但如果我将该将srb不放入线程中,即先放入后马上从队列取出,则没有任何问题,
线程中调用这部分: void CVNetDisk::DoWithRequest(PSCSI_REQUEST_BLOCK Srb) { Srb->SrbStatus = SRB_STATUS_SUCCESS; Srb->ScsiStatus = SCSISTAT_GOOD; DbgPrint(\"this=%x,m_ScsiHBA=%x\\n\",this,m_ScsiHBA); (this->*m_CmdTable[Srb->Cdb[0]])(Srb); ScsiPortNotification(RequestComplete, (PVOID)m_ScsiHBA, Srb ); ScsiPortNotification(NextRequest, (PVOID)m_ScsiHBA, NULL ); } 如果我不使用线程方式,如下代码,则没有任何问题. Srb->SrbStatus = SRB_STATUS_PENDING; ((PSRB_EXTENSION)Srb->SrbExtension)->Srb = Srb; ExInterlockedInsertTailList( &m_RequestHead, &((PSRB_EXTENSION)Srb->SrbExtension)->ListEntry, &m_ListLock ); // // Signal the worker for processing // // DbgPrint(\"KeWaitForSingleObject\\n\"); if(iFlag!=1) { PLIST_ENTRY ListEntry; ListEntry = ExInterlockedRemoveHeadList ( &m_RequestHead, &m_ListLock ); if( ListEntry!=NULL ) { Srb = SRB_FROM_ENTRY(ListEntry); Srb->SrbStatus = SRB_STATUS_SUCCESS; Srb->ScsiStatus = SCSISTAT_GOOD; // DbgPrint(\"this=%x\\n\",this); (this->*m_CmdTable[Srb->Cdb[0]])(Srb); CVDevice::RequestReturn(Srb); } } 请问如何解决?谢谢啦 |
|
沙发#
发布于:2004-04-16 15:45
你在其他线程里面call scsiportnotification() portdriver是不会响应你的,相当于你的scsiportnotification无效,所以会timeout然后resetbus.
你只有在startio里面或者用scsiportnotification(RequestTimerCall)可以试一下 |
|
板凳#
发布于:2004-04-16 15:51
呵呵,原来有这一招,谢谢,我先试一下,郁闷了一天了
|
|
地板#
发布于:2004-04-16 17:01
haha ,搞定了,高手就是高手,我想给分怎么给?
|
|
地下室#
发布于:2004-04-16 17:03
在你的第一个贴子旁边。有个给分,谢谢
|
|
5楼#
发布于:2004-04-16 17:06
呵呵,找到了
|
|
6楼#
发布于:2004-05-27 15:43
terrychen:
你做的是scsi虚拟磁盘吗? 我现在遇到几个奇怪的问题,不知道你碰到过没有? 1、我的虚拟磁盘格式化老出现不能格式化的提示,但是格式化后能够存取文件了 2、为什么从操作系统下来的读偏移有时候会大于我的磁盘大小阿,我的系统会越界 谢谢,其他高手也指点几招阿 |
|
7楼#
发布于:2004-05-28 13:12
第一个问题,看看你对格式化处理的cdb是不是处理好了?
第二个,你看看read capacity的处理,是不是有什么问题 |
|
8楼#
发布于:2004-05-28 15:52
hehe,谢谢大虾,经过数天的郁闷,已经搞定,谢谢拉
|
|
9楼#
发布于:2004-05-28 16:12
===========================================================
terrychen: 你做的是scsi虚拟磁盘吗? 我现在遇到几个奇怪的问题,不知道你碰到过没有? 1、我的虚拟磁盘格式化老出现不能格式化的提示,但是格式化后能够存取文件了 2、为什么从操作系统下来的读偏移有时候会大于我的磁盘大小阿,我的系统会越界 谢谢,其他高手也指点几招阿 =========================================================== kangzh: 我现在也差不多遇到你的第一个问题(我的是格式化时不能得到“FORMAT COMPLETE”的提示),能不能告诉我你是怎么解决的?客户在要驱动了,比较紧急。非常谢谢!我也是郁闷了好几天了。 |
|
10楼#
发布于:2004-05-28 16:29
呵呵,可能是你写的数据有些问题吧,检查一下读写数据的起始和终止地址有没有错误
|
|