Interpreting SCSI Errors using Event ID 153

Introduction

While working with Storage Issues on Windows Servers, I came across a lot of issues where IT Administrators struggle to understand the Meaning of Event ID 153. So in this article we will Learn, how we can better understand and Interpret Event ID 153.

So Let’s start with the Basics. Generally an Event ID 153 is Triggered with the Storage Miniport Driver Times Out. Miniport is a vendor specific driver which works in conjunction with the Microsoft Storport driver so that it can make the storport driver understand how the data is being flowed between the Storage, HBA and Windows.

Event ID 153 looks usual as any other Event ID:

Interpreting SCSI Errors using Event ID 153

The most interesting part of this event Id is not in the Fronted but in the Details of the Event:

Interpreting SCSI Errors using Event ID 153

Now Under Binary Data showing in Bytes you will have to read the Data under the Offset Value : 29th, 30th and 31st .

Interpreting SCSI Errors using Event ID 153

Now Let’s Understand what these Offset Values are:

29th Offset Value: SCSI Status

30th Offset Value: SRB status

31st Offset Value: SCSI command that is being retried  

Now these Values can vary, so Once you have the Values copied from your Event Message you will have to check these Status codes from the SCSI.H and SRB.H from WDK.

You can also get the same values from the below Links:

https://github.com/tpn/winsdk-10/blob/master/Include/10.0.14393.0/shared/srb.h

https://github.com/tpn/winsdk-10/blob/master/Include/10.0.14393.0/shared/scsi.h

SCSI bus status codes :

#define SCSISTAT_GOOD 0x00

#define SCSISTAT_CHECK_CONDITION 0x02

#define SCSISTAT_CONDITION_MET 0x04

#define SCSISTAT_BUSY 0x08

#define SCSISTAT_INTERMEDIATE 0x10

#define SCSISTAT_INTERMEDIATE_COND_MET 0x14

#define SCSISTAT_RESERVATION_CONFLICT 0x18

#define SCSISTAT_COMMAND_TERMINATED 0x22

#define SCSISTAT_QUEUE_FULL 0x28

SRB Status:

#define SRB_STATUS_PENDING 0x00

#define SRB_STATUS_SUCCESS 0x01

#define SRB_STATUS_ABORTED 0x02

#define SRB_STATUS_ABORT_FAILED 0x03

#define SRB_STATUS_ERROR 0x04

#define SRB_STATUS_BUSY 0x05

#define SRB_STATUS_INVALID_REQUEST 0x06

#define SRB_STATUS_INVALID_PATH_ID 0x07

#define SRB_STATUS_NO_DEVICE 0x08

#define SRB_STATUS_TIMEOUT 0x09

#define SRB_STATUS_SELECTION_TIMEOUT 0x0A

#define SRB_STATUS_COMMAND_TIMEOUT 0x0B

#define SRB_STATUS_MESSAGE_REJECTED 0x0D

#define SRB_STATUS_BUS_RESET 0x0E

#define SRB_STATUS_PARITY_ERROR 0x0F

#define SRB_STATUS_REQUEST_SENSE_FAILED 0x10

#define SRB_STATUS_NO_HBA 0x11

#define SRB_STATUS_DATA_OVERRUN 0x12

#define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13

#define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14

#define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15

#define SRB_STATUS_REQUEST_FLUSHED 0x16

#define SRB_STATUS_INVALID_LUN 0x20

#define SRB_STATUS_INVALID_TARGET_ID 0x21

#define SRB_STATUS_BAD_FUNCTION 0x22

#define SRB_STATUS_ERROR_RECOVERY 0x23

#define SRB_STATUS_NOT_POWERED 0x24

#define SRB_STATUS_LINK_DOWN 0x25

SCSI command that is being retried :

#define SCSIOP_READ_FORMATTED_CAPACITY 0x23

#define SCSIOP_READ_CAPACITY 0x25

#define SCSIOP_READ 0x28

#define SCSIOP_WRITE 0x2A

#define SCSIOP_SEEK 0x2B

#define SCSIOP_LOCATE 0x2B

#define SCSIOP_POSITION_TO_ELEMENT 0x2B

#define SCSIOP_WRITE_VERIFY 0x2E

#define SCSIOP_VERIFY 0x2F

#define SCSIOP_SEARCH_DATA_HIGH 0x30

#define SCSIOP_SEARCH_DATA_EQUAL 0x31

#define SCSIOP_SEARCH_DATA_LOW 0x32

#define SCSIOP_SET_LIMITS 0x33

#define SCSIOP_READ_POSITION 0x34

#define SCSIOP_SYNCHRONIZE_CACHE 0x35

#define SCSIOP_COMPARE 0x39

#define SCSIOP_COPY_COMPARE 0x3A

#define SCSIOP_WRITE_DATA_BUFF 0x3B

#define SCSIOP_READ_DATA_BUFF 0x3C

#define SCSIOP_WRITE_LONG 0x3F

#define SCSIOP_CHANGE_DEFINITION 0x40

#define SCSIOP_WRITE_SAME 0x41

#define SCSIOP_READ_SUB_CHANNEL 0x42

#define SCSIOP_UNMAP 0x42 // block device

#define SCSIOP_READ_TOC 0x43

#define SCSIOP_READ_HEADER 0x44

#define SCSIOP_REPORT_DENSITY_SUPPORT 0x44 // tape

#define SCSIOP_PLAY_AUDIO 0x45

#define SCSIOP_GET_CONFIGURATION 0x46

#define SCSIOP_PLAY_AUDIO_MSF 0x47

#define SCSIOP_PLAY_TRACK_INDEX 0x48

#define SCSIOP_SANITIZE 0x48 // block device

#define SCSIOP_PLAY_TRACK_RELATIVE 0x49

#define SCSIOP_GET_EVENT_STATUS 0x4A

#define SCSIOP_PAUSE_RESUME 0x4B

#define SCSIOP_LOG_SELECT 0x4C

#define SCSIOP_LOG_SENSE 0x4D

#define SCSIOP_STOP_PLAY_SCAN 0x4E

#define SCSIOP_XDWRITE 0x50

#define SCSIOP_XPWRITE 0x51

#define SCSIOP_READ_DISK_INFORMATION 0x51

#define SCSIOP_READ_DISC_INFORMATION 0x51 // proper use of disc over disk

#define SCSIOP_READ_TRACK_INFORMATION 0x52

#define SCSIOP_XDWRITE_READ 0x53

#define SCSIOP_RESERVE_TRACK_RZONE 0x53

#define SCSIOP_SEND_OPC_INFORMATION 0x54 // optimum power calibration

#define SCSIOP_MODE_SELECT10 0x55

#define SCSIOP_RESERVE_UNIT10 0x56

#define SCSIOP_RESERVE_ELEMENT 0x56

#define SCSIOP_RELEASE_UNIT10 0x57

#define SCSIOP_RELEASE_ELEMENT 0x57

#define SCSIOP_REPAIR_TRACK 0x58

#define SCSIOP_MODE_SENSE10 0x5A

#define SCSIOP_CLOSE_TRACK_SESSION 0x5B

#define SCSIOP_READ_BUFFER_CAPACITY 0x5C

#define SCSIOP_SEND_CUE_SHEET 0x5D

#define SCSIOP_PERSISTENT_RESERVE_IN 0x5E

#define SCSIOP_PERSISTENT_RESERVE_OUT 0x5F

 

 

Example

Now Let’s Take One Example that is in front of us.

Below are the values that I have received on the Offset 29, 30 and 31.

02     04     2A

SCSI Status : 02 

SRB status : 04

SCSI command that is being retried : 2A

As per the SCSI.H and SRB.H  

0x02 : SCSISTAT_CHECK_CONDITION

0x04 : SRB_STATUS_ERROR                   

0x2A : SCSIOP_WRITE

There is a Check Condition that is being Issued by the Target.
SRB_STATUS_ERROR 0x04 The SCSI Status here indicates that we encountered an error.
SCSIOP_WRITE – 0x2A We are attempting a Write operation. 

Since there is an issue during the Write Operation, I will recommend to check from the Storage End for any issues.

Ashutosh Dixit

I am currently working as a Senior Technical Support Engineer with VMware Premier Services for Telco. Before this, I worked as a Technical Lead with Microsoft Enterprise Platform Support for Production and Premier Support. I am an expert in High-Availability, Deployments, and VMware Core technology along with Tanzu and Horizon.

Leave a Reply