@@ -3249,15 +3249,15 @@ static void pqi_process_raid_io_error(struct pqi_io_request *io_request)
sense_data_length = sizeof(error_info->data);
if (scsi_status == SAM_STAT_CHECK_CONDITION &&
- scsi_normalize_sense(error_info->data,
- sense_data_length, &sshdr) &&
- sshdr.sense_key == HARDWARE_ERROR &&
- sshdr.asc == 0x3e) {
+ scsi_normalize_sense(error_info->data,
+ sense_data_length, &sshdr) &&
+ sshdr.sense_key == HARDWARE_ERROR &&
+ scsi_sense_asc(&sshdr) == ASC_LU_HAS_NOT_SELF_CONFIGURED_YET) {
struct pqi_ctrl_info *ctrl_info = shost_to_hba(scmd->device->host);
struct pqi_scsi_dev *device = scmd->device->hostdata;
- switch (sshdr.ascq) {
- case 0x1: /* LOGICAL UNIT FAILURE */
+ switch (sshdr.sense_code) {
+ case LU_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);
@@ -3265,10 +3265,15 @@ static void pqi_process_raid_io_error(struct pqi_io_request *io_request)
host_byte = DID_NO_CONNECT;
break;
- default: /* See http://www.t10.org/lists/asc-num.htm#ASC_3E */
+ default:
+ /* include/scsi/scsi_sense.h */
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);
+ scmd_printk(KERN_ERR, scmd,
+ "received unhandled error %d from controller for scsi %d:%d:%d:%d\n",
+ scsi_sense_ascq(&sshdr),
+ ctrl_info->scsi_host->host_no,
+ device->bus, device->target,
+ device->lun);
break;
}
}
@@ -3286,11 +3291,11 @@ static void pqi_process_raid_io_error(struct pqi_io_request *io_request)
sense_data_length &&
scsi_normalize_sense(error_info->data, sense_data_length, &sshdr) &&
sshdr.sense_key == ILLEGAL_REQUEST &&
- sshdr.asc == 0x26 &&
- sshdr.ascq == 0x0) {
+ sshdr.sense_code == INVALID_FIELD_IN_PARAMETER_LIST) {
host_byte = DID_NO_CONNECT;
pqi_take_device_offline(scmd->device, "AIO");
- scsi_build_sense_buffer(0, scmd->sense_buffer, HARDWARE_ERROR, 0x3e, 0x1);
+ scsi_set_sense_buffer(0, scmd->sense_buffer, HARDWARE_ERROR,
+ LU_FAILURE);
}
scmd->result = scsi_status;
@@ -3380,7 +3385,7 @@ static void pqi_process_aio_io_error(struct pqi_io_request *io_request)
}
if (device_offline && sense_data_length == 0)
- scsi_build_sense(scmd, 0, HARDWARE_ERROR, 0x3e, 0x1);
+ scsi_set_sense(scmd, 0, HARDWARE_ERROR, LU_FAILURE);
scmd->result = scsi_status;
set_host_byte(scmd, host_byte);
Refactor the smartpqi driver to use the 16-bits sense_code field of struct scsi_sense_hdr and replace all hard-coded additional sense codes and additional sense code qualifiers with the enum values defined in include/scsi/scsi_sense.h. This helps with code clarity as the sense codes being processed are easier to test and self-documented. No functional change intended. Signed-off-by: Damien Le Moal <dlemoal@kernel.org> --- drivers/scsi/smartpqi/smartpqi_init.c | 31 ++++++++++++++++----------- 1 file changed, 18 insertions(+), 13 deletions(-)