VOID
AdapterCompleteSrb(
- IN PXENVBD_ADAPTER Adapter,
- IN PSCSI_REQUEST_BLOCK Srb
+ IN PXENVBD_ADAPTER Adapter,
+ IN PXENVBD_SRBEXT SrbExt
)
{
+ PSCSI_REQUEST_BLOCK Srb = SrbExt->Srb;
+
ASSERT3U(Srb->SrbStatus, !=, SRB_STATUS_PENDING);
++Adapter->Completed;
)
{
PXENVBD_ADAPTER Adapter = DevExt;
+ PXENVBD_SRBEXT SrbExt = Srb->SrbExtension;
InitSrbExt(Srb);
break;
}
- AdapterCompleteSrb(Adapter, Srb);
+ AdapterCompleteSrb(Adapter, SrbExt);
return FALSE;
}
)
{
PXENVBD_ADAPTER Adapter = DevExt;
+ PXENVBD_SRBEXT SrbExt = Srb->SrbExtension;
PXENVBD_TARGET Target;
Target = AdapterGetTarget(Adapter, Srb->TargetId);
goto fail1;
++Adapter->StartIo;
- if (TargetStartIo(Target, Srb))
- AdapterCompleteSrb(Adapter, Srb);
+ if (TargetStartIo(Target, SrbExt))
+ AdapterCompleteSrb(Adapter, SrbExt);
return TRUE;
fail1:
Srb->SrbStatus = SRB_STATUS_INVALID_TARGET_ID;
- AdapterCompleteSrb(Adapter, Srb);
+ AdapterCompleteSrb(Adapter, SrbExt);
return TRUE;
}
typedef struct _XENVBD_ADAPTER XENVBD_ADAPTER, *PXENVBD_ADAPTER;
-#include <storport.h>
#include <store_interface.h>
#include <evtchn_interface.h>
#include <gnttab_interface.h>
#include <debug_interface.h>
#include <suspend_interface.h>
+#include "srbext.h"
+
#define ADAPTER_GET_INTERFACE(_name, _type) \
extern VOID \
AdapterGet ## _name ## Interface( \
extern VOID
AdapterCompleteSrb(
- IN PXENVBD_ADAPTER Adapter,
- IN PSCSI_REQUEST_BLOCK Srb
+ IN PXENVBD_ADAPTER Adapter,
+ IN PXENVBD_SRBEXT SrbExt
);
extern VOID
Verbose("Target[%d] : FreshSrb 0x%p -> SCSI_ABORTED\n", TargetGetTargetId(Target), SrbExt->Srb);
SrbExt->Srb->SrbStatus = SRB_STATUS_ABORTED;
SrbExt->Srb->ScsiStatus = 0x40; // SCSI_ABORTED;
- AdapterCompleteSrb(TargetGetAdapter(Target), SrbExt->Srb);
+ AdapterCompleteSrb(TargetGetAdapter(Target), SrbExt);
}
// Fail PreparedReqs
if (InterlockedDecrement(&SrbExt->Count) == 0) {
SrbExt->Srb->ScsiStatus = 0x40; // SCSI_ABORTED
- AdapterCompleteSrb(TargetGetAdapter(Target), SrbExt->Srb);
+ AdapterCompleteSrb(TargetGetAdapter(Target), SrbExt);
}
}
}
break;
SrbExt = CONTAINING_RECORD(Entry, XENVBD_SRBEXT, Entry);
SrbExt->Srb->SrbStatus = SRB_STATUS_SUCCESS;
- AdapterCompleteSrb(TargetGetAdapter(Target), SrbExt->Srb);
+ AdapterCompleteSrb(TargetGetAdapter(Target), SrbExt);
}
}
Srb->ScsiStatus = 0x40; // SCSI_ABORTED
}
- AdapterCompleteSrb(TargetGetAdapter(Target), Srb);
+ AdapterCompleteSrb(TargetGetAdapter(Target), SrbExt);
}
}
return TRUE;
}
-__checkReturn
BOOLEAN
TargetStartIo(
- __in PXENVBD_TARGET Target,
- __in PSCSI_REQUEST_BLOCK Srb
+ IN PXENVBD_TARGET Target,
+ IN PXENVBD_SRBEXT SrbExt
)
{
+ PSCSI_REQUEST_BLOCK Srb = SrbExt->Srb;
+
if (!__ValidateSrbForTarget(Target, Srb))
return TRUE;
__in PXENVBD_TARGET Target
);
-__checkReturn
extern BOOLEAN
TargetStartIo(
- __in PXENVBD_TARGET Target,
- __in PSCSI_REQUEST_BLOCK Srb
+ IN PXENVBD_TARGET Target,
+ IN PXENVBD_SRBEXT SrbExt
);
extern VOID