@@ -251,6 +251,7 @@ static void scsifront_cdb_cmd_done(struct vscsifrnt_info *info,
struct scsi_cmnd *sc;
uint32_t id;
uint8_t sense_len;
+ int result;
id = ring_rsp->rqid;
shadow = info->shadow[id];
@@ -261,7 +262,13 @@ static void scsifront_cdb_cmd_done(struct vscsifrnt_info *info,
scsifront_gnttab_done(info, shadow);
scsifront_put_rqid(info, id);
- sc->result = ring_rsp->rslt;
+ result = ring_rsp->rslt;
+ sc->result = 0;
+ if ((result >> 24) & 0xff)
+ set_host_byte(sc, DID_ERROR);
+ else if (host_byte(result))
+ set_host_byte(sc, host_byte(result));
+ set_status_byte(sc, status_byte(result));
scsi_set_resid(sc, ring_rsp->residual_len);
sense_len = min_t(uint8_t, VSCSIIF_SENSE_BUFFERSIZE,
The Xen guest might run against arbitrary backends, so the driver might receive a status with driver_byte set. Map these errors to DID_ERROR to be consistent with recent changes. Signed-off-by: Hannes Reinecke <hare@suse.de> --- drivers/scsi/xen-scsifront.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)