kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1475回复:10

zdhe 请现身,scsi大虾们看过来

楼主#
更多 发布于:2004-04-16 15:20
我前一段时间下载了你很久以前贴的有关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);
}
}

请问如何解决?谢谢啦
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-16 15:45
你在其他线程里面call scsiportnotification() portdriver是不会响应你的,相当于你的scsiportnotification无效,所以会timeout然后resetbus.
你只有在startio里面或者用scsiportnotification(RequestTimerCall)可以试一下
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-16 15:51
呵呵,原来有这一招,谢谢,我先试一下,郁闷了一天了
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-16 17:01
haha ,搞定了,高手就是高手,我想给分怎么给?
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-16 17:03
在你的第一个贴子旁边。有个给分,谢谢
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-16 17:06
呵呵,找到了
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-27 15:43
terrychen:
你做的是scsi虚拟磁盘吗?
我现在遇到几个奇怪的问题,不知道你碰到过没有?
1、我的虚拟磁盘格式化老出现不能格式化的提示,但是格式化后能够存取文件了
2、为什么从操作系统下来的读偏移有时候会大于我的磁盘大小阿,我的系统会越界
谢谢,其他高手也指点几招阿
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-28 13:12
第一个问题,看看你对格式化处理的cdb是不是处理好了?
第二个,你看看read capacity的处理,是不是有什么问题
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-05-28 15:52
hehe,谢谢大虾,经过数天的郁闷,已经搞定,谢谢拉
szzy
驱动牛犊
驱动牛犊
  • 注册日期2002-08-12
  • 最后登录2007-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-05-28 16:12
===========================================================
terrychen:
你做的是scsi虚拟磁盘吗?
我现在遇到几个奇怪的问题,不知道你碰到过没有?
1、我的虚拟磁盘格式化老出现不能格式化的提示,但是格式化后能够存取文件了
2、为什么从操作系统下来的读偏移有时候会大于我的磁盘大小阿,我的系统会越界
谢谢,其他高手也指点几招阿
===========================================================


kangzh:
     我现在也差不多遇到你的第一个问题(我的是格式化时不能得到“FORMAT COMPLETE”的提示),能不能告诉我你是怎么解决的?客户在要驱动了,比较紧急。非常谢谢!我也是郁闷了好几天了。

 
kangzh
驱动小牛
驱动小牛
  • 注册日期2004-03-09
  • 最后登录2012-08-06
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-05-28 16:29
呵呵,可能是你写的数据有些问题吧,检查一下读写数据的起始和终止地址有没有错误
游客

返回顶部