scsi: fas216: Translate message to host byte status
authorHannes Reinecke <hare@suse.de>
Tue, 27 Apr 2021 08:30:38 +0000 (10:30 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 1 Jun 2021 02:48:24 +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.

[mkp: zeroday bug report: s/SCpnt->result/SCpnt/]

Link: https://lore.kernel.org/r/20210427083046.31620-33-hare@suse.de
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/arm/fas216.c

index 9402cdc..7e0e465 100644 (file)
@@ -2042,8 +2042,10 @@ fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result)
 {
        info->stats.fins += 1;
 
-       SCpnt->result = result << 16 | info->scsi.SCp.Message << 8 |
-                       info->scsi.SCp.Status;
+       set_host_byte(SCpnt, result);
+       if (result == DID_OK)
+               scsi_msg_to_host_byte(SCpnt, info->scsi.SCp.Message);
+       set_status_byte(SCpnt, info->scsi.SCp.Status);
 
        fas216_log_command(info, LOG_CONNECT, SCpnt,
                "command complete, result=0x%08x", SCpnt->result);
@@ -2051,8 +2053,7 @@ fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result)
        /*
         * If the driver detected an error, we're all done.
         */
-       if (host_byte(SCpnt->result) != DID_OK ||
-           msg_byte(SCpnt->result) != COMMAND_COMPLETE)
+       if (get_host_byte(SCpnt) != DID_OK)
                goto done;
 
        /*