scsi: smartpqi: Reporting unhandled SCSI errors
Subsystems (2)
PATCH 1/1 scsi: smartpqi: Reporting unhandled SCSI errors
When a HARDWARE_ERROR is triggered for asc=0x3e, the actual code is only considering the case where ascq=0x1.
Following the http://www.t10.org/lists/asc-num.htm#ASC_3E specification, other values may occur like a timeout (ascq=0x2).
This patch is about printing an error message when a non-handled message is received.
This could help diagnose a possible miss-behavior of the controller and/or a missing implementation in the Linux Kernel.
This patch keeps the exact same error handling but prints a message if an ascq != 1 income.
--- drivers/scsi/smartpqi/smartpqi_init.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-)
drivers/scsi/smartpqi/smartpqi_init.c +16 -7
@@ -2762,16 +2762,25 @@ static void pqi_process_raid_io_error(struct pqi_io_request *io_request) scsi_normalize_sense(error_info->data, sense_data_length, &sshdr) && sshdr.sense_key == HARDWARE_ERROR && - sshdr.asc ==0x3e && - sshdr.ascq == 0x1) { + sshdr.asc == 0x3e) {struct pqi_ctrl_info *ctrl_info =shost_to_hba (scmd->device->host);struct pqi_scsi_dev *device = scmd->device->hostdata; -if (printk_ratelimit ()) -scmd_printk (KERN_ERR , scmd,"received 'logical unit failure' from controller for scsi %d:%d:%d:%d\n" , - ctrl_info->scsi_host->host_no, device->bus, device->target, device->lun); -pqi_take_device_offline (scmd->device,"RAID" ); - host_byte =DID_NO_CONNECT ; +switch (sshdr.ascq) { +case 0x1 :/*LOGICAL UNIT FAILURE */ +if (printk_ratelimit ()) +scmd_printk (KERN_ERR , scmd,"received 'logical unit failure' from controller for scsi %d:%d:%d:%d\n" , + ctrl_info->scsi_host->host_no, device->bus, device->target, device->lun); +pqi_take_device_offline (scmd->device,"RAID" ); + host_byte =DID_NO_CONNECT ; +break ; + +default :/* See http://www.t10.org/lists/asc-num.htm#ASC_3E */ +if (printk_ratelimit ()) +scmd_printk (KERN_ERR , scmd,"received unhandled error %d from controller for scsi %d:%d:%d:%d\n" , + sshdr.ascq, ctrl_info->scsi_host->host_no, device->bus, device->target, device->lun); +break ; + } }if (sense_data_length >SCSI_SENSE_BUFFERSIZE )
Signature · 1 line
2.20.1
Hi there !
Any reactions to this one ? I didn't got a single comment. Cheers,
Erwan,
Quoted 55 lines · Erwan Velu
When a
HARDWARE_ERRORis triggered for asc=0x3e, the actual code is only considering the case where ascq=0x1.Following the http://www.t10.org/lists/asc-num.htm#ASC_3E specification, other values may occur like a timeout (ascq=0x2).
This patch is about printing an error message when a non-handled message is received.
This could help diagnose a possible miss-behavior of the controller and/or a missing implementation in the Linux Kernel.This patch keeps the exact same error handling but prints a message if an ascq != 1 income.
Signed-off-by Erwan Velu <[email protected]>--- drivers/scsi/smartpqi/smartpqi_init.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-)drivers/scsi/smartpqi/smartpqi_init.c +16
-8@@ -2762,16 +2762,25 @@ static void pqi_process_raid_io_error(struct pqi_io_request *io_request)scsi_normalize_sense (error_info->data, sense_data_length, &sshdr) && sshdr.sense_key ==HARDWARE_ERROR && - sshdr.asc ==0x3e && - sshdr.ascq == 0x1) { + sshdr.asc == 0x3e) { struct pqi_ctrl_info *ctrl_info = shost_to_hba(scmd->device->host);struct pqi_scsi_dev *device = scmd->device->hostdata; -if (printk_ratelimit ()) -scmd_printk (KERN_ERR , scmd,"received 'logical unit failure' from controller for scsi %d:%d:%d:%d\n" , - ctrl_info->scsi_host->host_no, device->bus, device->target, device->lun); -pqi_take_device_offline (scmd->device,"RAID" ); - host_byte =DID_NO_CONNECT ; +switch (sshdr.ascq) { +case 0x1 :/*LOGICAL UNIT FAILURE */ +if (printk_ratelimit ()) +scmd_printk (KERN_ERR , scmd,"received 'logical unit failure' from controller for scsi %d:%d:%d:%d\n" , + ctrl_info->scsi_host->host_no, device->bus, device->target, device->lun); +pqi_take_device_offline (scmd->device,"RAID" ); + host_byte =DID_NO_CONNECT ; +break ; + +default :/* See http://www.t10.org/lists/asc-num.htm#ASC_3E */ +if (printk_ratelimit ()) +scmd_printk (KERN_ERR , scmd,"received unhandled error %d from controller for scsi %d:%d:%d:%d\n" , + sshdr.ascq, ctrl_info->scsi_host->host_no, device->bus, device->target, device->lun); +break ; + } }if (sense_data_length >SCSI_SENSE_BUFFERSIZE ) --2.20.1
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Erwan Velu
Sent: Wednesday, April 10, 2019 6:03 AM
Cc: Erwan Velu <[email protected]>; Don Brace <[email protected]>; James E.J. Bottomley <[email protected]>; Martin K. Petersen <[email protected]>; open list:MICROSEMI SMART ARRAY SMARTPQI DRIVER (smartpqi) <[email protected]>; open list:MICROSEMI SMART ARRAY SMARTPQI DRIVER (smartpqi) <[email protected]>; open list <[email protected]>
Subject: Re: [PATCH] scsi: smartpqi: Reporting unhandled SCSI errors
Hi there !
Any reactions to this one ? I didn't got a single comment. Cheers,
Erwan,
Quoted 11 lines · Erwan Velu
When a
HARDWARE_ERRORis triggered for asc=0x3e, the actual code is only considering the case where ascq=0x1.Following the http://www.t10.org/lists/asc-num.htm#ASC_3E specification, other values may occur like a timeout (ascq=0x2).
This patch is about printing an error message when a non-handled message is received.
This could help diagnose a possible miss-behavior of the controller and/or a missing implementation in the Linux Kernel.This patch keeps the exact same error handling but prints a message if an ascq != 1 income.
Signed-off-by Erwan Velu <[email protected]>
Martin K. Petersen
AppliedQuoted 12 lines
Quoted 12 lines
When a
HARDWARE_ERRORis triggered for asc=0x3e, the actual code is only considering the case where ascq=0x1.Following the http://www.t10.org/lists/asc-num.htm#ASC_3E
specification, other values may occur like a timeout (ascq=0x2).This patch is about printing an error message when a non-handled message is received. This could help diagnose a possible miss-behavior of the controller and/or a missing implementation in the Linux Kernel.
Quoted 5 lines
Quoted 4 lines
This patch keeps the exact same error handling but prints a message if an ascq != 1 income.
Signed-off-by Erwan Velu <[email protected]>Acked-by Don Brace <[email protected]>
Applied to 5.2/scsi-queue. Thanks!
Signature · 1 line
Martin K. Petersen Oracle Linux Engineering