An explanation of the purpose of this patch is available in the patch "scsi: Introduce the scsi_status union". Cc: Russell King <linux@xxxxxxxxxxxxxxx> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> --- drivers/scsi/arm/fas216.c | 40 ++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/drivers/scsi/arm/fas216.c b/drivers/scsi/arm/fas216.c index b9ca25c77075..86fa59587a3b 100644 --- a/drivers/scsi/arm/fas216.c +++ b/drivers/scsi/arm/fas216.c @@ -399,7 +399,7 @@ static void print_debug_list(void) printk("\n"); } -static void fas216_done(FAS216_Info *info, unsigned int result); +static void fas216_done(FAS216_Info *info, enum host_status result); /** * fas216_get_last_msg - retrive last message from the list @@ -1986,7 +1986,7 @@ static void fas216_kick(FAS216_Info *info) * Clean up from issuing a BUS DEVICE RESET message to a device. */ static void fas216_devicereset_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, - unsigned int result) + enum host_status result) { fas216_log(info, LOG_ERROR, "fas216 device reset complete"); @@ -2004,7 +2004,7 @@ static void fas216_devicereset_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, * Finish processing automatic request sense command */ static void fas216_rq_sns_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, - unsigned int result) + enum host_status result) { fas216_log_target(info, LOG_CONNECT, SCpnt->device->id, "request sense complete, result=0x%04x%02x%02x", @@ -2020,7 +2020,7 @@ static void fas216_rq_sns_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, //printk("scsi%d.%c: sense buffer: ", info->host->host_no, '0' + SCpnt->device->id); //{ int i; for (i = 0; i < 32; i++) printk("%02x ", SCpnt->sense_buffer[i]); printk("\n"); } /* - * Note that we don't set SCpnt->result, since that should + * Note that we don't set SCpnt->status since that should * reflect the status of the command that we were asked by * the upper layers to process. This would have been set * correctly by fas216_std_done. @@ -2038,36 +2038,38 @@ static void fas216_rq_sns_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, * Finish processing of standard command */ static void -fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result) +fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, + enum host_status result) { info->stats.fins += 1; - SCpnt->result = result << 16 | info->scsi.SCp.Message << 8 | - info->scsi.SCp.Status; + SCpnt->status = (union scsi_status){.b.host = result, + .b.msg = info->scsi.SCp.Message, + .b.status = info->scsi.SCp.Status}; fas216_log_command(info, LOG_CONNECT, SCpnt, - "command complete, result=0x%08x", SCpnt->result); + "command complete, result=0x%08x", SCpnt->status.combined); /* * If the driver detected an error, we're all done. */ - if (host_byte(SCpnt->result) != DID_OK || - msg_byte(SCpnt->result) != COMMAND_COMPLETE) + if (host_byte(SCpnt->status) != DID_OK || + msg_byte(SCpnt->status) != COMMAND_COMPLETE) goto done; /* * If the command returned CHECK_CONDITION or COMMAND_TERMINATED * status, request the sense information. */ - if (status_byte(SCpnt->result) == CHECK_CONDITION || - status_byte(SCpnt->result) == COMMAND_TERMINATED) + if (status_byte(SCpnt->status) == CHECK_CONDITION || + status_byte(SCpnt->status) == COMMAND_TERMINATED) goto request_sense; /* * If the command did not complete with GOOD status, * we are all done here. */ - if (status_byte(SCpnt->result) != GOOD) + if (status_byte(SCpnt->status) != GOOD) goto done; /* @@ -2087,7 +2089,7 @@ fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result) default: scmd_printk(KERN_ERR, SCpnt, "incomplete data transfer detected: res=%08X ptr=%p len=%X\n", - SCpnt->result, info->scsi.SCp.ptr, + SCpnt->status.combined, info->scsi.SCp.ptr, info->scsi.SCp.this_residual); scsi_print_command(SCpnt); set_host_byte(SCpnt, DID_ERROR); @@ -2132,13 +2134,13 @@ fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result) /** * fas216_done - complete processing for current command * @info: interface that completed - * @result: driver byte of result + * @result: host byte of result * * Complete processing for current command */ -static void fas216_done(FAS216_Info *info, unsigned int result) +static void fas216_done(FAS216_Info *info, enum host_status result) { - void (*fn)(FAS216_Info *, struct scsi_cmnd *, unsigned int); + void (*fn)(FAS216_Info *, struct scsi_cmnd *, enum host_status); struct scsi_cmnd *SCpnt; unsigned long flags; @@ -2178,7 +2180,7 @@ static void fas216_done(FAS216_Info *info, unsigned int result) clear_bit(SCpnt->device->id * 8 + (u8)(SCpnt->device->lun & 0x7), info->busyluns); - fn = (void (*)(FAS216_Info *, struct scsi_cmnd *, unsigned int))SCpnt->host_scribble; + fn = (void *)SCpnt->host_scribble; fn(info, SCpnt, result); if (info->scsi.irq) { @@ -2216,7 +2218,7 @@ static int fas216_queue_command_lck(struct scsi_cmnd *SCpnt, SCpnt->scsi_done = done; SCpnt->host_scribble = (void *)fas216_std_done; - SCpnt->result = 0; + SCpnt->status.combined = 0; init_SCp(SCpnt);