scsi: esp_scsi: Use host byte as last argument to esp_cmd_is_done()
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>
This commit is contained in:
parent
d37932a916
commit
6b50529e2f
|
@ -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,
|
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;
|
struct scsi_device *dev = cmd->device;
|
||||||
int tgt = dev->id;
|
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->active_cmd = NULL;
|
||||||
esp_unmap_dma(esp, cmd);
|
esp_unmap_dma(esp, cmd);
|
||||||
esp_free_lun_tag(ent, dev->hostdata);
|
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) {
|
if (ent->eh_done) {
|
||||||
complete(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);
|
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)
|
static void esp_event_queue_full(struct esp *esp, struct esp_cmd_entry *ent)
|
||||||
{
|
{
|
||||||
struct scsi_device *dev = ent->cmd->device;
|
struct scsi_device *dev = ent->cmd->device;
|
||||||
|
@ -1244,7 +1243,7 @@ static int esp_finish_select(struct esp *esp)
|
||||||
* all bets are off.
|
* all bets are off.
|
||||||
*/
|
*/
|
||||||
esp_schedule_reset(esp);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1289,7 +1288,7 @@ static int esp_finish_select(struct esp *esp)
|
||||||
esp->target[dev->id].flags |= ESP_TGT_CHECK_NEGO;
|
esp->target[dev->id].flags |= ESP_TGT_CHECK_NEGO;
|
||||||
|
|
||||||
scsi_esp_cmd(esp, ESP_CMD_ESEL);
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1874,10 +1873,7 @@ again:
|
||||||
ent->flags |= ESP_CMD_FLAG_AUTOSENSE;
|
ent->flags |= ESP_CMD_FLAG_AUTOSENSE;
|
||||||
esp_autosense(esp, ent);
|
esp_autosense(esp, ent);
|
||||||
} else {
|
} else {
|
||||||
esp_cmd_is_done(esp, ent, cmd,
|
esp_cmd_is_done(esp, ent, cmd, DID_OK);
|
||||||
compose_result(ent->status,
|
|
||||||
ent->message,
|
|
||||||
DID_OK));
|
|
||||||
}
|
}
|
||||||
} else if (ent->message == DISCONNECT) {
|
} else if (ent->message == DISCONNECT) {
|
||||||
esp_log_disconnect("Disconnecting tgt[%d] tag[%x:%x]\n",
|
esp_log_disconnect("Disconnecting tgt[%d] tag[%x:%x]\n",
|
||||||
|
|
Loading…
Reference in New Issue