scsi: wd33c93: Translate message byte to host byte
authorHannes Reinecke <hare@suse.de>
Tue, 27 Apr 2021 08:30:31 +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.

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

index a23277b..4468bc4 100644 (file)
@@ -1176,13 +1176,13 @@ wd33c93_intr(struct Scsi_Host *instance)
                        if (cmd->SCp.Status == ILLEGAL_STATUS_BYTE)
                                cmd->SCp.Status = lun;
                        if (cmd->cmnd[0] == REQUEST_SENSE
-                           && cmd->SCp.Status != SAM_STAT_GOOD)
-                               cmd->result =
-                                   (cmd->
-                                    result & 0x00ffff) | (DID_ERROR << 16);
-                       else
-                               cmd->result =
-                                   cmd->SCp.Status | (cmd->SCp.Message << 8);
+                           && cmd->SCp.Status != SAM_STAT_GOOD) {
+                               set_host_byte(cmd, DID_ERROR);
+                       } else {
+                               set_host_byte(cmd, DID_OK);
+                               scsi_msg_to_host_byte(cmd, cmd->SCp.Message);
+                               set_status_byte(cmd, cmd->SCp.Status);
+                       }
                        cmd->scsi_done(cmd);
 
 /* We are no longer  connected to a target - check to see if
@@ -1262,11 +1262,14 @@ wd33c93_intr(struct Scsi_Host *instance)
                    hostdata->connected = NULL;
                hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
                hostdata->state = S_UNCONNECTED;
-               if (cmd->cmnd[0] == REQUEST_SENSE && cmd->SCp.Status != SAM_STAT_GOOD)
-                       cmd->result =
-                           (cmd->result & 0x00ffff) | (DID_ERROR << 16);
-               else
-                       cmd->result = cmd->SCp.Status | (cmd->SCp.Message << 8);
+               if (cmd->cmnd[0] == REQUEST_SENSE &&
+                   cmd->SCp.Status != SAM_STAT_GOOD) {
+                       set_host_byte(cmd, DID_ERROR);
+               } else {
+                       set_host_byte(cmd, DID_OK);
+                       scsi_msg_to_host_byte(cmd, cmd->SCp.Message);
+                       set_status_byte(cmd, cmd->SCp.Status);
+               }
                cmd->scsi_done(cmd);
 
 /* We are no longer connected to a target - check to see if
@@ -1295,14 +1298,14 @@ wd33c93_intr(struct Scsi_Host *instance)
                        hostdata->busy[cmd->device->id] &= ~(1 << (cmd->device->lun & 0xff));
                        hostdata->state = S_UNCONNECTED;
                        DB(DB_INTR, printk(":%d", cmd->SCp.Status))
-                           if (cmd->cmnd[0] == REQUEST_SENSE
-                               && cmd->SCp.Status != SAM_STAT_GOOD)
-                               cmd->result =
-                                   (cmd->
-                                    result & 0x00ffff) | (DID_ERROR << 16);
-                       else
-                               cmd->result =
-                                   cmd->SCp.Status | (cmd->SCp.Message << 8);
+                       if (cmd->cmnd[0] == REQUEST_SENSE
+                           && cmd->SCp.Status != SAM_STAT_GOOD) {
+                               set_host_byte(cmd, DID_ERROR);
+                       } else {
+                               set_host_byte(cmd, DID_OK);
+                               scsi_msg_to_host_byte(cmd, cmd->SCp.Message);
+                               set_status_byte(cmd, cmd->SCp.Status);
+                       }
                        cmd->scsi_done(cmd);
                        break;
                case S_PRE_TMP_DISC: