44 ULONG timesAlreadyRetried;
51 Pkt->RetryIn100nsUnits = 0;
60 TracePrint((
TRACE_LEVEL_ERROR, TRACE_FLAG_GENERAL,
"Unhandled SRB Function %xh in error path for packet %p (did miniport change Srb.Cdb.OperationCode ?)", (
ULONG)pCdb->
CDB10.OperationCode,
Pkt));
91 &
Pkt->RetryIn100nsUnits);
106 UCHAR additionalSenseQual = 0;
111 senseInfoBufferLength,
115 &additionalSenseQual);
119 ULONG retryIntervalSeconds = 0;
130 &retryIntervalSeconds);
142 setRetryIntervalSeconds =
TRUE;
147 setRetryIntervalSeconds =
TRUE;
150 if (setRetryIntervalSeconds) {
151 retryIntervalSeconds =
MAX(retryIntervalSeconds, 2);
157 Pkt->RetryIn100nsUnits = retryIntervalSeconds;
158 Pkt->RetryIn100nsUnits *= 1000 * 1000 * 10;
165 ULONG retryIntervalSeconds = 0;
176 &retryIntervalSeconds);
186 setRetryIntervalSeconds =
TRUE;
191 setRetryIntervalSeconds =
TRUE;
194 if (setRetryIntervalSeconds) {
195 retryIntervalSeconds =
MAX(retryIntervalSeconds, 2);
220 Pkt->RetryIn100nsUnits = retryIntervalSeconds;
221 Pkt->RetryIn100nsUnits *= 1000 * 1000 * 10;
228 ULONG retryIntervalSeconds = 0;
240 &retryIntervalSeconds);
244 #if (NTDDI_VERSION >= NTDDI_WINBLUE) 245 else if (ClasspSrbTimeOutStatus(
Pkt->
Srb)) {
269 Pkt->RetryIn100nsUnits = retryIntervalSeconds;
270 Pkt->RetryIn100nsUnits *= 1000 * 1000 * 10;
276 ULONG retryIntervalSeconds = 0;
288 &retryIntervalSeconds);
310 #if (NTDDI_VERSION >= NTDDI_WINBLUE) 311 else if (ClasspSrbTimeOutStatus(
Pkt->
Srb)) {
335 Pkt->RetryIn100nsUnits = retryIntervalSeconds;
336 Pkt->RetryIn100nsUnits *= 1000 * 1000 * 10;
341 ULONG retryIntervalSeconds = 0;
352 &retryIntervalSeconds);
356 Pkt->RetryIn100nsUnits = retryIntervalSeconds;
357 Pkt->RetryIn100nsUnits *= 1000 * 1000 * 10;
381 UCHAR startBufferLength = 0;
387 &startBufferLength)) {
390 UCHAR outBufferLength = 0;
394 if (ScsiGetNextSenseDescriptorByType(startBuffer,
404 if (ScsiValidateInformationSenseDescriptor(
outBuffer, outBufferLength)) {
406 isInformationValid =
TRUE;
424 isInformationValid =
TRUE;
427 if (isInformationValid) {
437 TracePrint((
TRACE_LEVEL_ERROR, TRACE_FLAG_GENERAL,
"Unhandled SRB Function %xh in error path for packet %p (did miniport change Srb.Cdb.OperationCode ?)", (
ULONG)pCdb->
CDB10.OperationCode,
Pkt));
461 #if !defined(__REACTOS__) && NTDDI_VERSION >= NTDDI_WINBLUE 482 if (!fdoData->DisableThrottling) {
494 #if (NTDDI_VERSION >= NTDDI_WINBLUE) 525 cdbOpcode = pCdb->CDB10.OperationCode;
608 if (
Pkt->RetryIn100nsUnits == 0){
614 NT_ASSERT(
Pkt->RetryIn100nsUnits < 100 * 1000 * 1000 * 10);
764 ULONG bytesToNextPageBoundary;
NTSTATUS SubmitTransferPacket(PTRANSFER_PACKET Pkt)
FORCEINLINE UCHAR SrbGetSenseInfoBufferLength(_In_ PVOID Srb)
_In_ PTRANSFER_PACKET Pkt
* PSTORAGE_ADAPTER_DESCRIPTOR
BOOLEAN NTAPI KeSetTimer(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN PKDPC Dpc OPTIONAL)
#define STATUS_INSUFFICIENT_RESOURCES
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
BOOLEAN DriverUsesStartIO
BOOLEAN InterpretTransferPacketError(PTRANSFER_PACKET Pkt)
struct _CDB::_MEDIA_REMOVAL MEDIA_REMOVAL
FORCEINLINE VOID SrbSetDataTransferLength(_In_ PVOID Srb, _In_ ULONG DataTransferLength)
struct _SCSI_REQUEST_BLOCK * PSCSI_REQUEST_BLOCK
DISK_GEOMETRY DiskGeometry
#define SCSIOP_MODE_SENSE
#define UNREFERENCED_PARAMETER(P)
BOOLEAN NTAPI ClassInterpretSenseInfo(_In_ PDEVICE_OBJECT Fdo, _In_ PSCSI_REQUEST_BLOCK _Srb, _In_ UCHAR MajorFunctionCode, _In_ ULONG IoDeviceCode, _In_ ULONG RetryCount, _Out_ NTSTATUS *Status, _Out_opt_ _Deref_out_range_(0, 100) ULONG *RetryInterval)
BOOLEAN RetryTransferPacket(PTRANSFER_PACKET Pkt)
struct _FUNCTIONAL_DEVICE_EXTENSION * PartitionZeroExtension
BOOLEAN NTAPI KeInsertQueueDpc(IN PKDPC Dpc, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
COMMON_DEVICE_EXTENSION CommonExtension
UCHAR NumThinProvisioningRetries
#define REVERSE_BYTES(Destination, Source)
FORCEINLINE BOOLEAN ClasspIsTokenOperation(_In_ PCDB Cdb)
#define SCSI_SENSE_OPTIONS_FIXED_FORMAT_IF_UNKNOWN_FORMAT_INDICATED
PSTORAGE_REQUEST_BLOCK_HEADER Srb
#define SCSI_ADSENSE_LUN_NOT_READY
UCHAR NumIoTimeoutRetries
FORCEINLINE PCDB SrbGetCdb(_In_ PVOID Srb)
VOID TransferPacketQueueRetryDpc(PTRANSFER_PACKET Pkt)
struct _CDB::_CDB10 CDB10
PUCHAR LowMemRetry_remainingBufPtr
FORCEINLINE VOID SrbSetSenseInfoBufferLength(_In_ PVOID Srb, _In_ UCHAR SenseInfoBufferLength)
#define TRACKING_FORWARD_PROGRESS_PATH3
#define TRACE_LEVEL_INFORMATION
#define STATUS_VERIFY_REQUIRED
FORCEINLINE VOID SrbClearSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
#define SRB_STATUS(Status)
LARGE_INTEGER TargetLocationCopy
#define IsDescriptorSenseDataFormat(SenseInfoBuffer)
struct _CDB::_CDB16 CDB16
FORCEINLINE VOID FREE_PORT_ALLOCATED_SENSE_BUFFER_EX(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PSTORAGE_REQUEST_BLOCK_HEADER Srb)
#define STATUS_IO_DEVICE_ERROR
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
struct _FUNCTIONAL_DEVICE_EXTENSION * PFUNCTIONAL_DEVICE_EXTENSION
FORCEINLINE UCHAR ClasspTransferPacketGetSenseInfoBufferLength(_In_ PTRANSFER_PACKET Pkt)
#define SCSIOP_MODE_SENSE10
FORCEINLINE BOOLEAN PORT_ALLOCATED_SENSE_EX(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PSTORAGE_REQUEST_BLOCK_HEADER Srb)
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
#define SL_OVERRIDE_VERIFY_VOLUME
#define NUM_THIN_PROVISIONING_RETRIES
FORCEINLINE BOOLEAN ClasspIsOffloadDataTransferCommand(_In_ PCDB Cdb)
#define TEST_FLAG(Flags, Bit)
#define TRACKING_FORWARD_PROGRESS_PATH2
UCHAR additionalSenseCode
struct _CDB::_MODE_SENSE MODE_SENSE
LARGE_INTEGER LowMemRetry_nextChunkTargetLocation
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
VOID ClasspConvertToScsiRequestBlock(_Out_ PSCSI_REQUEST_BLOCK Srb, _In_ PSTORAGE_REQUEST_BLOCK SrbEx)
PSRB_HISTORY RetryHistory
VOID SetupReadWriteTransferPacket(PTRANSFER_PACKET pkt, PVOID Buf, ULONG Len, LARGE_INTEGER DiskLocation, PIRP OriginalIrp)
PFIXED_SENSE_DATA senseInfoBuffer
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER
struct _TRANSFER_PACKET * PTRANSFER_PACKET
BOOLEAN ClasspIsThinProvisioningError(_In_ PSCSI_REQUEST_BLOCK _Srb)
#define SRB_STATUS_DATA_OVERRUN
#define DBGGETSCSIOPSTR(_pSrb)
#define SRB_FLAGS_DISABLE_DISCONNECT
#define SRB_FUNCTION_STORAGE_REQUEST_BLOCK
#define SCSI_SENSE_COPY_ABORTED
#define SCSIOP_READ_CAPACITY16
#define SCSIOP_MEDIUM_REMOVAL
#define SRB_STATUS_SELECTION_TIMEOUT
#define SCSI_SENSE_ABORTED_COMMAND
PFIXED_SENSE_DATA outBuffer
#define TRACE_LEVEL_ERROR
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
ULONG LowMemRetry_remainingBufLen
#define TRACKING_FORWARD_PROGRESS_PATH1
#define SCSI_SENSEQ_DATA_UNDERRUN
#define IS_SCSIOP_READWRITE(opCode)
FORCEINLINE PVOID SrbGetSenseInfoBuffer(_In_ PVOID Srb)
VOID InitLowMemRetry(PTRANSFER_PACKET Pkt, PVOID BufPtr, ULONG Len, LARGE_INTEGER TargetLocation)
#define _Analysis_assume_
VOID NTAPI TransferPacketRetryTimerDpc(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
#define SCSI_SENSE_DESCRIPTOR_TYPE_INFORMATION
#define SCSIOP_READ_CAPACITY
FORCEINLINE VOID SrbSetDataBuffer(_In_ PVOID Srb, _In_opt_ __drv_aliasesMem PVOID DataBuffer)
static PDB_INFORMATION information
FORCEINLINE VOID SrbSetSenseInfoBuffer(_In_ PVOID Srb, _In_opt_ PVOID SenseInfoBuffer)
FORCEINLINE VOID SrbSetSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
#define RtlZeroMemory(Destination, Length)
FORCEINLINE BOOLEAN ClasspTransferPacketGetNumberOfRetriesDone(_In_ PTRANSFER_PACKET Pkt, _In_ PCDB Cdb, _Out_ PULONG TimesAlreadyRetried)
SENSE_DATA_EX SrbErrorSenseData
FORCEINLINE PCDB ClasspTransferPacketGetCdb(_In_ PTRANSFER_PACKET Pkt)
PCLASS_INTERPRET_SENSE_INFO2 InterpretSenseInfo
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
#define SCSI_ADSENSE_COPY_TARGET_DEVICE_ERROR
#define CLASS_SRB_STORAGE_REQUEST_BLOCK
BOOLEAN StepLowMemRetry(PTRANSFER_PACKET Pkt)
__callback PCLASS_INTERPRET_SENSE_INFO Interpret
#define SET_FLAG(Flags, Bit)
FORCEINLINE PVOID ClasspTransferPacketGetSenseInfoBuffer(_In_ PTRANSFER_PACKET Pkt)
#define REVERSE_BYTES_QUAD(Destination, Source)
#define SRB_FLAGS_QUEUE_ACTION_ENABLE
#define STATUS_DEVICE_NOT_READY
_In_opt_ PVOID DeferredContext