diff -arup linux-2.6.7-rc2/drivers/block/scsi_ioctl.c linux-2.6.7-rc2-work/drivers/block/scsi_ioctl.c --- linux-2.6.7-rc2/drivers/block/scsi_ioctl.c 2004-05-29 23:26:48.000000000 -0700 +++ linux-2.6.7-rc2-work/drivers/block/scsi_ioctl.c 2004-06-02 04:32:27.000000000 -0700 @@ -185,11 +185,11 @@ static int sg_io(request_queue_t *q, str 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 -arup linux-2.6.7-rc2/drivers/scsi/scsi_lib.c linux-2.6.7-rc2-work/drivers/scsi/scsi_lib.c --- linux-2.6.7-rc2/drivers/scsi/scsi_lib.c 2004-05-29 23:26:10.000000000 -0700 +++ linux-2.6.7-rc2-work/drivers/scsi/scsi_lib.c 2004-06-02 02:51:16.000000000 -0700 @@ -708,8 +708,7 @@ void scsi_io_completion(struct scsi_cmnd } 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 (cmd->sense_buffer[0] & 0x70) {