mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-16 18:26:42 +00:00
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.de Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
3c96913145
commit
a9d2d80658
@ -794,7 +794,10 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
|
||||
|
||||
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.
|
||||
@ -833,12 +836,12 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
|
||||
xfer_warn = 0;
|
||||
|
||||
if (xfer_warn) {
|
||||
switch (status_byte(SCpnt->result)) {
|
||||
case CHECK_CONDITION:
|
||||
case COMMAND_TERMINATED:
|
||||
case BUSY:
|
||||
case QUEUE_FULL:
|
||||
case RESERVATION_CONFLICT:
|
||||
switch (get_status_byte(SCpnt)) {
|
||||
case SAM_STAT_CHECK_CONDITION:
|
||||
case SAM_STAT_COMMAND_TERMINATED:
|
||||
case SAM_STAT_BUSY:
|
||||
case SAM_STAT_TASK_SET_FULL:
|
||||
case SAM_STAT_RESERVATION_CONFLICT:
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -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))) {
|
||||
printk(KERN_CRIT "scsi%d.%c: WRITE attempted with NO_WRITE flag set\n",
|
||||
host->host->host_no, '0' + SCpnt->device->id);
|
||||
SCpnt->result = DID_NO_CONNECT << 16;
|
||||
set_host_byte(SCpnt, DID_NO_CONNECT);
|
||||
done(SCpnt);
|
||||
return 0;
|
||||
}
|
||||
@ -2492,7 +2495,7 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt,
|
||||
unsigned long flags;
|
||||
|
||||
if (!queue_add_cmd_ordered(&host->queues.issue, SCpnt)) {
|
||||
SCpnt->result = DID_ERROR << 16;
|
||||
set_host_byte(SCpnt, DID_ERROR);
|
||||
done(SCpnt);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user