An explanation of the purpose of this patch is available in the patch "scsi: Introduce the scsi_status union". Cc: Kai Mäkisara <Kai.Makisara@kolumbus.f> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> --- drivers/scsi/st.c | 23 ++++++++++++----------- drivers/scsi/st.h | 5 +++-- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index 9ca536aae784..3deea1f7c8b9 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c @@ -360,13 +360,13 @@ static void st_analyze_sense(struct st_request *SRpnt, struct st_cmdstatus *s) /* Convert the result to success code */ static int st_chk_result(struct scsi_tape *STp, struct st_request * SRpnt) { - int result = SRpnt->result; + union scsi_status result = SRpnt->status; u8 scode; DEB(const char *stp;) char *name = tape_name(STp); struct st_cmdstatus *cmdstatp; - if (!result) + if (!result.combined) return 0; cmdstatp = &STp->buffer->cmdstat; @@ -380,7 +380,7 @@ static int st_chk_result(struct scsi_tape *STp, struct st_request * SRpnt) DEB( if (debugging) { st_printk(ST_DEB_MSG, STp, - "Error: %x, cmd: %x %x %x %x %x %x\n", result, + "Error: %x, cmd: %x %x %x %x %x %x\n", result.combined, SRpnt->cmd[0], SRpnt->cmd[1], SRpnt->cmd[2], SRpnt->cmd[3], SRpnt->cmd[4], SRpnt->cmd[5]); if (cmdstatp->have_sense) @@ -390,8 +390,9 @@ static int st_chk_result(struct scsi_tape *STp, struct st_request * SRpnt) if (!debugging) { /* Abnormal conditions for tape */ if (!cmdstatp->have_sense) st_printk(KERN_WARNING, STp, - "Error %x (driver bt 0x%x, host bt 0x%x).\n", - result, driver_byte(result), host_byte(result)); + "Error %x (driver bt 0x%x, host bt 0x%x).\n", + result.combined, driver_byte(result), + host_byte(result)); else if (cmdstatp->have_sense && scode != NO_SENSE && scode != RECOVERED_ERROR && @@ -484,7 +485,7 @@ static void st_do_stats(struct scsi_tape *STp, struct request *req) atomic64_add(ktime_to_ns(now), &STp->stats->tot_write_time); atomic64_add(ktime_to_ns(now), &STp->stats->tot_io_time); atomic64_inc(&STp->stats->write_cnt); - if (scsi_req(req)->result) { + if (scsi_req(req)->status.combined) { atomic64_add(atomic_read(&STp->stats->last_write_size) - STp->buffer->cmdstat.residual, &STp->stats->write_byte_cnt); @@ -498,7 +499,7 @@ static void st_do_stats(struct scsi_tape *STp, struct request *req) atomic64_add(ktime_to_ns(now), &STp->stats->tot_read_time); atomic64_add(ktime_to_ns(now), &STp->stats->tot_io_time); atomic64_inc(&STp->stats->read_cnt); - if (scsi_req(req)->result) { + if (scsi_req(req)->status.combined) { atomic64_add(atomic_read(&STp->stats->last_read_size) - STp->buffer->cmdstat.residual, &STp->stats->read_byte_cnt); @@ -522,7 +523,7 @@ static void st_scsi_execute_end(struct request *req, blk_status_t status) struct scsi_tape *STp = SRpnt->stp; struct bio *tmp; - STp->buffer->cmdstat.midlevel_result = SRpnt->result = rq->result; + STp->buffer->cmdstat.midlevel_status = SRpnt->status = rq->status; STp->buffer->cmdstat.residual = rq->resid_len; st_do_stats(STp, req); @@ -718,7 +719,7 @@ static int write_behind_check(struct scsi_tape * STp) DEB(if (debugging && retval) st_printk(ST_DEB_MSG, STp, "Async write error %x, return value %d.\n", - STbuffer->cmdstat.midlevel_result, retval);) /* end DEB */ + STbuffer->cmdstat.midlevel_status.combined, retval);) /* end DEB */ return retval; } @@ -752,7 +753,7 @@ static int cross_eof(struct scsi_tape * STp, int forward) st_release_request(SRpnt); SRpnt = NULL; - if ((STp->buffer)->cmdstat.midlevel_result != 0) + if ((STp->buffer)->cmdstat.midlevel_status.combined != 0) st_printk(KERN_ERR, STp, "Stepping over filemark %s failed.\n", forward ? "forward" : "backward"); @@ -1118,7 +1119,7 @@ static int check_tape(struct scsi_tape *STp, struct file *filp) goto err_out; } - if (!SRpnt->result && !STp->buffer->cmdstat.have_sense) { + if (!SRpnt->status.combined && !STp->buffer->cmdstat.have_sense) { STp->max_block = ((STp->buffer)->b_data[1] << 16) | ((STp->buffer)->b_data[2] << 8) | (STp->buffer)->b_data[3]; STp->min_block = ((STp->buffer)->b_data[4] << 8) | diff --git a/drivers/scsi/st.h b/drivers/scsi/st.h index 95d2e7a7988d..2021a5a9f65b 100644 --- a/drivers/scsi/st.h +++ b/drivers/scsi/st.h @@ -7,10 +7,11 @@ #include <linux/mutex.h> #include <linux/kref.h> #include <scsi/scsi_cmnd.h> +#include <scsi/scsi_status.h> /* Descriptor for analyzed sense data */ struct st_cmdstatus { - int midlevel_result; + union scsi_status midlevel_status; struct scsi_sense_hdr sense_hdr; int have_sense; int residual; @@ -27,7 +28,7 @@ struct scsi_tape; struct st_request { unsigned char cmd[MAX_COMMAND_SIZE]; unsigned char sense[SCSI_SENSE_BUFFERSIZE]; - int result; + union scsi_status status; struct scsi_tape *stp; struct completion *waiting; struct bio *bio;