From fa0e5198823890e99b768e152041422b8386eeec Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Mon, 18 Oct 2004 09:37:38 -0700 Subject: [PATCH] [PATCH] return full SCSI status byte in SG_IO This has been around for a while. Return the full scsi result byte in rq->errors for SG_IO generated requests. Signed-off-by: Jens Axboe Signed-off-by: Linus Torvalds --- drivers/block/scsi_ioctl.c | 10 +++++----- drivers/scsi/scsi_lib.c | 3 +-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/block/scsi_ioctl.c b/drivers/block/scsi_ioctl.c index f8fb5322febb7..b66f16726181c 100644 --- a/drivers/block/scsi_ioctl.c +++ b/drivers/block/scsi_ioctl.c @@ -293,11 +293,11 @@ static int sg_io(struct file *file, request_queue_t *q, blk_execute_rq(q, bd_disk, rq); /* write to all output members */ - hdr->status = rq->errors; - hdr->masked_status = (hdr->status >> 1) & 0x1f; - hdr->msg_status = 0; - hdr->host_status = 0; - hdr->driver_status = 0; + hdr->status = 0xff & rq->errors; + hdr->masked_status = status_byte(rq->errors); + hdr->msg_status = msg_byte(rq->errors); + hdr->host_status = host_byte(rq->errors); + hdr->driver_status = driver_byte(rq->errors); hdr->info = 0; if (hdr->masked_status || hdr->host_status || hdr->driver_status) hdr->info |= SG_INFO_CHECK; diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index b19ff1569e3bc..e908f75adb9e9 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -712,8 +712,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes, } if (blk_pc_request(req)) { /* SG_IO ioctl from block level */ - req->errors = (driver_byte(result) & DRIVER_SENSE) ? - (CHECK_CONDITION << 1) : (result & 0xff); + req->errors = result; if (result) { clear_errors = 0; if (scsi_command_normalize_sense(cmd, &sshdr)) { -- 2.53.0