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;
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define IS_SCSIOP_READWRITE(opCode)
#define TEST_FLAG(Flags, Bit)
#define SET_FLAG(Flags, Bit)
#define SCSI_ADSENSE_LUN_NOT_READY
#define SCSIOP_MODE_SENSE10
#define SCSI_SENSE_COPY_ABORTED
#define SCSIOP_MEDIUM_REMOVAL
#define SCSIOP_READ_CAPACITY
#define SCSIOP_MODE_SENSE
#define SCSI_SENSE_ABORTED_COMMAND
#define NUM_THIN_PROVISIONING_RETRIES
#define TRACKING_FORWARD_PROGRESS_PATH3
FORCEINLINE BOOLEAN ClasspIsOffloadDataTransferCommand(_In_ PCDB Cdb)
_In_ PTRANSFER_PACKET Pkt
BOOLEAN ClasspIsThinProvisioningError(_In_ PSCSI_REQUEST_BLOCK _Srb)
KDEFERRED_ROUTINE TransferPacketRetryTimerDpc
struct _TRANSFER_PACKET * PTRANSFER_PACKET
NTSTATUS SubmitTransferPacket(PTRANSFER_PACKET Pkt)
FORCEINLINE PVOID ClasspTransferPacketGetSenseInfoBuffer(_In_ PTRANSFER_PACKET Pkt)
#define TRACKING_FORWARD_PROGRESS_PATH2
FORCEINLINE BOOLEAN PORT_ALLOCATED_SENSE_EX(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PSTORAGE_REQUEST_BLOCK_HEADER Srb)
#define TRACKING_FORWARD_PROGRESS_PATH1
FORCEINLINE BOOLEAN ClasspIsTokenOperation(_In_ PCDB Cdb)
FORCEINLINE BOOLEAN ClasspTransferPacketGetNumberOfRetriesDone(_In_ PTRANSFER_PACKET Pkt, _In_ PCDB Cdb, _Out_ PULONG TimesAlreadyRetried)
VOID SetupReadWriteTransferPacket(PTRANSFER_PACKET pkt, PVOID Buf, ULONG Len, LARGE_INTEGER DiskLocation, PIRP OriginalIrp)
FORCEINLINE PCDB ClasspTransferPacketGetCdb(_In_ PTRANSFER_PACKET Pkt)
FORCEINLINE VOID FREE_PORT_ALLOCATED_SENSE_BUFFER_EX(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ PSTORAGE_REQUEST_BLOCK_HEADER Srb)
VOID ClasspConvertToScsiRequestBlock(_Out_ PSCSI_REQUEST_BLOCK Srb, _In_ PSTORAGE_REQUEST_BLOCK SrbEx)
FORCEINLINE UCHAR ClasspTransferPacketGetSenseInfoBufferLength(_In_ PTRANSFER_PACKET Pkt)
struct _FUNCTIONAL_DEVICE_EXTENSION * PFUNCTIONAL_DEVICE_EXTENSION
#define CLASS_SRB_STORAGE_REQUEST_BLOCK
static PDB_INFORMATION information
BOOLEAN NTAPI KeInsertQueueDpc(IN PKDPC Dpc, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
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)
#define DBGGETSCSIOPSTR(_pSrb)
#define SRB_STATUS_DATA_OVERRUN
#define SRB_FLAGS_DISABLE_DISCONNECT
#define SRB_FLAGS_QUEUE_ACTION_ENABLE
struct _SCSI_REQUEST_BLOCK * PSCSI_REQUEST_BLOCK
#define SRB_STATUS_SELECTION_TIMEOUT
#define SRB_FLAGS_DISABLE_SYNCH_TRANSFER
#define SRB_STATUS(Status)
#define _Analysis_assume_
#define UNREFERENCED_PARAMETER(P)
* PSTORAGE_ADAPTER_DESCRIPTOR
BOOLEAN StepLowMemRetry(PTRANSFER_PACKET Pkt)
BOOLEAN RetryTransferPacket(PTRANSFER_PACKET Pkt)
VOID TransferPacketQueueRetryDpc(PTRANSFER_PACKET Pkt)
VOID InitLowMemRetry(PTRANSFER_PACKET Pkt, PVOID BufPtr, ULONG Len, LARGE_INTEGER TargetLocation)
BOOLEAN InterpretTransferPacketError(PTRANSFER_PACKET Pkt)
UCHAR additionalSenseCode
#define SCSI_SENSE_DESCRIPTOR_TYPE_INFORMATION
#define SCSI_SENSE_OPTIONS_FIXED_FORMAT_IF_UNKNOWN_FORMAT_INDICATED
#define REVERSE_BYTES_QUAD(Destination, Source)
PFIXED_SENSE_DATA senseInfoBuffer
#define SCSI_ADSENSE_COPY_TARGET_DEVICE_ERROR
#define SCSIOP_READ_CAPACITY16
#define SCSI_SENSEQ_DATA_UNDERRUN
#define REVERSE_BYTES(Destination, Source)
PFIXED_SENSE_DATA outBuffer
#define IsDescriptorSenseDataFormat(SenseInfoBuffer)
#define SRB_FUNCTION_STORAGE_REQUEST_BLOCK
#define STATUS_DEVICE_NOT_READY
FORCEINLINE VOID SrbSetSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
FORCEINLINE VOID SrbSetDataTransferLength(_In_ PVOID Srb, _In_ ULONG DataTransferLength)
FORCEINLINE VOID SrbClearSrbFlags(_In_ PVOID Srb, _In_ ULONG Flags)
FORCEINLINE VOID SrbSetSenseInfoBufferLength(_In_ PVOID Srb, _In_ UCHAR SenseInfoBufferLength)
FORCEINLINE VOID SrbSetSenseInfoBuffer(_In_ PVOID Srb, _In_opt_ PVOID SenseInfoBuffer)
FORCEINLINE VOID SrbSetDataBuffer(_In_ PVOID Srb, _In_opt_ __drv_aliasesMem PVOID DataBuffer)
FORCEINLINE PVOID SrbGetSenseInfoBuffer(_In_ PVOID Srb)
FORCEINLINE UCHAR SrbGetSenseInfoBufferLength(_In_ PVOID Srb)
#define TRACE_LEVEL_ERROR
#define TRACE_LEVEL_INFORMATION
__callback PCLASS_INTERPRET_SENSE_INFO Interpret
PCLASS_INTERPRET_SENSE_INFO2 InterpretSenseInfo
PCLASS_DRIVER_EXTENSION DriverExtension
struct _FUNCTIONAL_DEVICE_EXTENSION * PartitionZeroExtension
DISK_GEOMETRY DiskGeometry
COMMON_DEVICE_EXTENSION CommonExtension
LARGE_INTEGER TargetLocationCopy
PSTORAGE_REQUEST_BLOCK_HEADER Srb
PUCHAR LowMemRetry_remainingBufPtr
LARGE_INTEGER LowMemRetry_nextChunkTargetLocation
SENSE_DATA_EX SrbErrorSenseData
UCHAR NumIoTimeoutRetries
UCHAR NumThinProvisioningRetries
BOOLEAN DriverUsesStartIO
PSRB_HISTORY RetryHistory
ULONG LowMemRetry_remainingBufLen
BOOLEAN NTAPI KeSetTimer(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN PKDPC Dpc OPTIONAL)
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
#define RtlZeroMemory(Destination, Length)
#define STATUS_IO_DEVICE_ERROR
#define STATUS_VERIFY_REQUIRED
#define STATUS_INSUFFICIENT_RESOURCES
struct _CDB::_CDB10 CDB10
struct _CDB::_MEDIA_REMOVAL MEDIA_REMOVAL
struct _CDB::_MODE_SENSE MODE_SENSE
struct _CDB::_CDB16 CDB16
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
#define SL_OVERRIDE_VERIFY_VOLUME
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
_In_opt_ PVOID DeferredContext
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2