Commit a9d2d806 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Martin K. Petersen

scsi: acornscsi: Translate message byte to host byte

Instead of setting the message byte translate it to the appropriate host
byte. As error recovery would return DID_ERROR for any non-zero message
byte the translation doesn't change the error handling.  And use SCSI
result accessors while we're at it.

Link: https://lore.kernel.org/r/20210427083046.31620-29-hare@suse.deSigned-off-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 3c969131
...@@ -794,7 +794,10 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp, ...@@ -794,7 +794,10 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
acornscsi_dma_cleanup(host); acornscsi_dma_cleanup(host);
SCpnt->result = result << 16 | host->scsi.SCp.Message << 8 | host->scsi.SCp.Status; set_host_byte(SCpnt, result);
if (result == DID_OK)
scsi_msg_to_host_byte(SCpnt, host->scsi.SCp.Message);
set_status_byte(SCpnt, host->scsi.SCp.Status);
/* /*
* In theory, this should not happen. In practice, it seems to. * In theory, this should not happen. In practice, it seems to.
...@@ -833,12 +836,12 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp, ...@@ -833,12 +836,12 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
xfer_warn = 0; xfer_warn = 0;
if (xfer_warn) { if (xfer_warn) {
switch (status_byte(SCpnt->result)) { switch (get_status_byte(SCpnt)) {
case CHECK_CONDITION: case SAM_STAT_CHECK_CONDITION:
case COMMAND_TERMINATED: case SAM_STAT_COMMAND_TERMINATED:
case BUSY: case SAM_STAT_BUSY:
case QUEUE_FULL: case SAM_STAT_TASK_SET_FULL:
case RESERVATION_CONFLICT: case SAM_STAT_RESERVATION_CONFLICT:
break; break;
default: default:
...@@ -2470,7 +2473,7 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt, ...@@ -2470,7 +2473,7 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt,
if (acornscsi_cmdtype(SCpnt->cmnd[0]) == CMD_WRITE && (NO_WRITE & (1 << SCpnt->device->id))) { if (acornscsi_cmdtype(SCpnt->cmnd[0]) == CMD_WRITE && (NO_WRITE & (1 << SCpnt->device->id))) {
printk(KERN_CRIT "scsi%d.%c: WRITE attempted with NO_WRITE flag set\n", printk(KERN_CRIT "scsi%d.%c: WRITE attempted with NO_WRITE flag set\n",
host->host->host_no, '0' + SCpnt->device->id); host->host->host_no, '0' + SCpnt->device->id);
SCpnt->result = DID_NO_CONNECT << 16; set_host_byte(SCpnt, DID_NO_CONNECT);
done(SCpnt); done(SCpnt);
return 0; return 0;
} }
...@@ -2492,7 +2495,7 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt, ...@@ -2492,7 +2495,7 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt,
unsigned long flags; unsigned long flags;
if (!queue_add_cmd_ordered(&host->queues.issue, SCpnt)) { if (!queue_add_cmd_ordered(&host->queues.issue, SCpnt)) {
SCpnt->result = DID_ERROR << 16; set_host_byte(SCpnt, DID_ERROR);
done(SCpnt); done(SCpnt);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment