scsi: acornscsi: Translate message byte to host byte
authorHannes Reinecke <hare@suse.de>
Tue, 27 Apr 2021 08:30:34 +0000 (10:30 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 1 Jun 2021 02:48:23 +0000 (22:48 -0400)
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>
drivers/scsi/arm/acornscsi.c

index 8b75d896f3932d79ffe09deb3b2c012b2cd53e5d..84fc7a0c6ff4dce8583ba2f863ffa3d936cd00c5 100644 (file)
@@ -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;
        }