Skip to content

Commit

Permalink
scsi: Rename linux-specific SG_ERR codes to generic SCSI_HOST error c…
Browse files Browse the repository at this point in the history
…odes

We really should make a distinction between legitimate sense codes
(ie if one is running against an emulated block device or for
pass-through sense codes), and the intermediate errors generated
during processing of the command, which really are not sense codes
but refer to some specific internal status. And this internal
state is not necessarily linux-specific, but rather can refer to
the qemu implementation itself.
So rename the linux-only SG_ERR codes to SCSI_HOST codes and make
them available generally.

Signed-off-by: Hannes Reinecke <hare@suse.de>
Message-Id: <20201116184041.60465-5-hare@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
hreinecke authored and bonzini committed Mar 6, 2021
1 parent f7544ed commit 41af878
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 10 deletions.
23 changes: 16 additions & 7 deletions include/scsi/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,22 @@ enum SCSIXferMode {
SCSI_XFER_TO_DEV, /* WRITE, MODE_SELECT, ... */
};

enum SCSIHostStatus {
SCSI_HOST_OK,
SCSI_HOST_NO_LUN,
SCSI_HOST_BUSY,
SCSI_HOST_TIME_OUT,
SCSI_HOST_BAD_RESPONSE,
SCSI_HOST_ABORTED,
SCSI_HOST_ERROR = 0x07,
SCSI_HOST_RESET = 0x08,
SCSI_HOST_TRANSPORT_DISRUPTED = 0xe,
SCSI_HOST_TARGET_FAILURE = 0x10,
SCSI_HOST_RESERVATION_ERROR = 0x11,
SCSI_HOST_ALLOCATION_FAILURE = 0x12,
SCSI_HOST_MEDIUM_ERROR = 0x13,
};

typedef struct SCSICommand {
uint8_t buf[SCSI_CMD_BUF_SIZE];
int len;
Expand Down Expand Up @@ -124,13 +140,6 @@ int scsi_cdb_length(uint8_t *buf);
#define SG_ERR_DRIVER_TIMEOUT 0x06
#define SG_ERR_DRIVER_SENSE 0x08

#define SG_ERR_DID_OK 0x00
#define SG_ERR_DID_NO_CONNECT 0x01
#define SG_ERR_DID_BUS_BUSY 0x02
#define SG_ERR_DID_TIME_OUT 0x03

#define SG_ERR_DRIVER_SENSE 0x08

int sg_io_sense_from_errno(int errno_value, struct sg_io_hdr *io_hdr,
SCSISense *sense);
#endif
Expand Down
6 changes: 3 additions & 3 deletions scsi/utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -612,9 +612,9 @@ int sg_io_sense_from_errno(int errno_value, struct sg_io_hdr *io_hdr,
if (errno_value != 0) {
return scsi_sense_from_errno(errno_value, sense);
} else {
if (io_hdr->host_status == SG_ERR_DID_NO_CONNECT ||
io_hdr->host_status == SG_ERR_DID_BUS_BUSY ||
io_hdr->host_status == SG_ERR_DID_TIME_OUT ||
if (io_hdr->host_status == SCSI_HOST_NO_LUN ||
io_hdr->host_status == SCSI_HOST_BUSY ||
io_hdr->host_status == SCSI_HOST_TIME_OUT ||
(io_hdr->driver_status & SG_ERR_DRIVER_TIMEOUT)) {
return BUSY;
} else if (io_hdr->host_status) {
Expand Down

0 comments on commit 41af878

Please sign in to comment.