scsi: esp_scsi: Use host byte as last argument to esp_cmd_is_done()
authorHannes Reinecke <hare@suse.de>
Wed, 13 Jan 2021 09:04:53 +0000 (10:04 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 23 Jan 2021 02:14:11 +0000 (21:14 -0500)
Just pass in the host byte to esp_cmd_is_done() and set the status or
message bytes if the host byte is DID_OK.

Link: https://lore.kernel.org/r/20210113090500.129644-29-hare@suse.de
Acked-by: Finn Thain <fthain@telegraphics.com.au>
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/esp_scsi.c

index 43a1fd1..2bc7e99 100644 (file)
@@ -896,7 +896,7 @@ static void esp_put_ent(struct esp *esp, struct esp_cmd_entry *ent)
 }
 
 static void esp_cmd_is_done(struct esp *esp, struct esp_cmd_entry *ent,
-                           struct scsi_cmnd *cmd, unsigned int result)
+                           struct scsi_cmnd *cmd, unsigned char host_byte)
 {
        struct scsi_device *dev = cmd->device;
        int tgt = dev->id;
@@ -905,7 +905,12 @@ static void esp_cmd_is_done(struct esp *esp, struct esp_cmd_entry *ent,
        esp->active_cmd = NULL;
        esp_unmap_dma(esp, cmd);
        esp_free_lun_tag(ent, dev->hostdata);
-       cmd->result = result;
+       cmd->result = 0;
+       set_host_byte(cmd, host_byte);
+       if (host_byte == DID_OK) {
+               set_msg_byte(cmd, ent->message);
+               set_status_byte(cmd, ent->status);
+       }
 
        if (ent->eh_done) {
                complete(ent->eh_done);
@@ -944,12 +949,6 @@ static void esp_cmd_is_done(struct esp *esp, struct esp_cmd_entry *ent,
        esp_maybe_execute_command(esp);
 }
 
-static unsigned int compose_result(unsigned int status, unsigned int message,
-                                  unsigned int driver_code)
-{
-       return (status | (message << 8) | (driver_code << 16));
-}
-
 static void esp_event_queue_full(struct esp *esp, struct esp_cmd_entry *ent)
 {
        struct scsi_device *dev = ent->cmd->device;
@@ -1244,7 +1243,7 @@ static int esp_finish_select(struct esp *esp)
                 * all bets are off.
                 */
                esp_schedule_reset(esp);
-               esp_cmd_is_done(esp, ent, cmd, (DID_ERROR << 16));
+               esp_cmd_is_done(esp, ent, cmd, DID_ERROR);
                return 0;
        }
 
@@ -1289,7 +1288,7 @@ static int esp_finish_select(struct esp *esp)
                esp->target[dev->id].flags |= ESP_TGT_CHECK_NEGO;
 
                scsi_esp_cmd(esp, ESP_CMD_ESEL);
-               esp_cmd_is_done(esp, ent, cmd, (DID_BAD_TARGET << 16));
+               esp_cmd_is_done(esp, ent, cmd, DID_BAD_TARGET);
                return 1;
        }
 
@@ -1874,10 +1873,7 @@ again:
                                ent->flags |= ESP_CMD_FLAG_AUTOSENSE;
                                esp_autosense(esp, ent);
                        } else {
-                               esp_cmd_is_done(esp, ent, cmd,
-                                               compose_result(ent->status,
-                                                              ent->message,
-                                                              DID_OK));
+                               esp_cmd_is_done(esp, ent, cmd, DID_OK);
                        }
                } else if (ent->message == DISCONNECT) {
                        esp_log_disconnect("Disconnecting tgt[%d] tag[%x:%x]\n",