Reduce sequential pointer derefs in scsi_error.c and reduce size as well
This patch reduces the number of sequential pointer derefs in drivers/scsi/scsi_error.c This has been submitted a number of times over a couple of years. I believe this version adresses all comments it has gathered over time. Please apply or reject with a reason. The benefits are: - makes the code easier to read. Lots of sequential derefs of the same pointers is not easy on the eye. - theoretically at least, just dereferencing the pointers once can allow the compiler to generally slightly faster code, so in theory this could also be a micro speed optimization. - reduces size of object file (tiny effect: on x86-64, in at least one configuration, the text size decreased from 9439 bytes to 9400) - removes some pointless (mostly trailing) whitespace. Signed-off-by: Jesper Juhl <jj@chaosbits.net> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
38f7aa23c4
commit
0bf8c86970
|
@ -129,14 +129,15 @@ enum blk_eh_timer_return scsi_times_out(struct request *req)
|
|||
{
|
||||
struct scsi_cmnd *scmd = req->special;
|
||||
enum blk_eh_timer_return rtn = BLK_EH_NOT_HANDLED;
|
||||
struct Scsi_Host *host = scmd->device->host;
|
||||
|
||||
trace_scsi_dispatch_cmd_timeout(scmd);
|
||||
scsi_log_completion(scmd, TIMEOUT_ERROR);
|
||||
|
||||
if (scmd->device->host->transportt->eh_timed_out)
|
||||
rtn = scmd->device->host->transportt->eh_timed_out(scmd);
|
||||
else if (scmd->device->host->hostt->eh_timed_out)
|
||||
rtn = scmd->device->host->hostt->eh_timed_out(scmd);
|
||||
if (host->transportt->eh_timed_out)
|
||||
rtn = host->transportt->eh_timed_out(scmd);
|
||||
else if (host->hostt->eh_timed_out)
|
||||
rtn = host->hostt->eh_timed_out(scmd);
|
||||
|
||||
if (unlikely(rtn == BLK_EH_NOT_HANDLED &&
|
||||
!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD))) {
|
||||
|
@ -507,22 +508,23 @@ static int scsi_try_host_reset(struct scsi_cmnd *scmd)
|
|||
{
|
||||
unsigned long flags;
|
||||
int rtn;
|
||||
struct Scsi_Host *host = scmd->device->host;
|
||||
struct scsi_host_template *hostt = host->hostt;
|
||||
|
||||
SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Snd Host RST\n",
|
||||
__func__));
|
||||
|
||||
if (!scmd->device->host->hostt->eh_host_reset_handler)
|
||||
if (!hostt->eh_host_reset_handler)
|
||||
return FAILED;
|
||||
|
||||
rtn = scmd->device->host->hostt->eh_host_reset_handler(scmd);
|
||||
rtn = hostt->eh_host_reset_handler(scmd);
|
||||
|
||||
if (rtn == SUCCESS) {
|
||||
if (!scmd->device->host->hostt->skip_settle_delay)
|
||||
if (!hostt->skip_settle_delay)
|
||||
ssleep(HOST_RESET_SETTLE_TIME);
|
||||
spin_lock_irqsave(scmd->device->host->host_lock, flags);
|
||||
scsi_report_bus_reset(scmd->device->host,
|
||||
scmd_channel(scmd));
|
||||
spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
|
||||
spin_lock_irqsave(host->host_lock, flags);
|
||||
scsi_report_bus_reset(host, scmd_channel(scmd));
|
||||
spin_unlock_irqrestore(host->host_lock, flags);
|
||||
}
|
||||
|
||||
return rtn;
|
||||
|
@ -536,22 +538,23 @@ static int scsi_try_bus_reset(struct scsi_cmnd *scmd)
|
|||
{
|
||||
unsigned long flags;
|
||||
int rtn;
|
||||
struct Scsi_Host *host = scmd->device->host;
|
||||
struct scsi_host_template *hostt = host->hostt;
|
||||
|
||||
SCSI_LOG_ERROR_RECOVERY(3, printk("%s: Snd Bus RST\n",
|
||||
__func__));
|
||||
|
||||
if (!scmd->device->host->hostt->eh_bus_reset_handler)
|
||||
if (!hostt->eh_bus_reset_handler)
|
||||
return FAILED;
|
||||
|
||||
rtn = scmd->device->host->hostt->eh_bus_reset_handler(scmd);
|
||||
rtn = hostt->eh_bus_reset_handler(scmd);
|
||||
|
||||
if (rtn == SUCCESS) {
|
||||
if (!scmd->device->host->hostt->skip_settle_delay)
|
||||
if (!hostt->skip_settle_delay)
|
||||
ssleep(BUS_RESET_SETTLE_TIME);
|
||||
spin_lock_irqsave(scmd->device->host->host_lock, flags);
|
||||
scsi_report_bus_reset(scmd->device->host,
|
||||
scmd_channel(scmd));
|
||||
spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
|
||||
spin_lock_irqsave(host->host_lock, flags);
|
||||
scsi_report_bus_reset(host, scmd_channel(scmd));
|
||||
spin_unlock_irqrestore(host->host_lock, flags);
|
||||
}
|
||||
|
||||
return rtn;
|
||||
|
@ -577,16 +580,18 @@ static int scsi_try_target_reset(struct scsi_cmnd *scmd)
|
|||
{
|
||||
unsigned long flags;
|
||||
int rtn;
|
||||
struct Scsi_Host *host = scmd->device->host;
|
||||
struct scsi_host_template *hostt = host->hostt;
|
||||
|
||||
if (!scmd->device->host->hostt->eh_target_reset_handler)
|
||||
if (!hostt->eh_target_reset_handler)
|
||||
return FAILED;
|
||||
|
||||
rtn = scmd->device->host->hostt->eh_target_reset_handler(scmd);
|
||||
rtn = hostt->eh_target_reset_handler(scmd);
|
||||
if (rtn == SUCCESS) {
|
||||
spin_lock_irqsave(scmd->device->host->host_lock, flags);
|
||||
spin_lock_irqsave(host->host_lock, flags);
|
||||
__starget_for_each_device(scsi_target(scmd->device), NULL,
|
||||
__scsi_report_device_reset);
|
||||
spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
|
||||
spin_unlock_irqrestore(host->host_lock, flags);
|
||||
}
|
||||
|
||||
return rtn;
|
||||
|
@ -605,27 +610,28 @@ static int scsi_try_target_reset(struct scsi_cmnd *scmd)
|
|||
static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd)
|
||||
{
|
||||
int rtn;
|
||||
struct scsi_host_template *hostt = scmd->device->host->hostt;
|
||||
|
||||
if (!scmd->device->host->hostt->eh_device_reset_handler)
|
||||
if (!hostt->eh_device_reset_handler)
|
||||
return FAILED;
|
||||
|
||||
rtn = scmd->device->host->hostt->eh_device_reset_handler(scmd);
|
||||
rtn = hostt->eh_device_reset_handler(scmd);
|
||||
if (rtn == SUCCESS)
|
||||
__scsi_report_device_reset(scmd->device, NULL);
|
||||
return rtn;
|
||||
}
|
||||
|
||||
static int scsi_try_to_abort_cmd(struct scsi_cmnd *scmd)
|
||||
static int scsi_try_to_abort_cmd(struct scsi_host_template *hostt, struct scsi_cmnd *scmd)
|
||||
{
|
||||
if (!scmd->device->host->hostt->eh_abort_handler)
|
||||
if (!hostt->eh_abort_handler)
|
||||
return FAILED;
|
||||
|
||||
return scmd->device->host->hostt->eh_abort_handler(scmd);
|
||||
return hostt->eh_abort_handler(scmd);
|
||||
}
|
||||
|
||||
static void scsi_abort_eh_cmnd(struct scsi_cmnd *scmd)
|
||||
{
|
||||
if (scsi_try_to_abort_cmd(scmd) != SUCCESS)
|
||||
if (scsi_try_to_abort_cmd(scmd->device->host->hostt, scmd) != SUCCESS)
|
||||
if (scsi_try_bus_device_reset(scmd) != SUCCESS)
|
||||
if (scsi_try_target_reset(scmd) != SUCCESS)
|
||||
if (scsi_try_bus_reset(scmd) != SUCCESS)
|
||||
|
@ -958,7 +964,7 @@ static int scsi_eh_abort_cmds(struct list_head *work_q,
|
|||
SCSI_LOG_ERROR_RECOVERY(3, printk("%s: aborting cmd:"
|
||||
"0x%p\n", current->comm,
|
||||
scmd));
|
||||
rtn = scsi_try_to_abort_cmd(scmd);
|
||||
rtn = scsi_try_to_abort_cmd(scmd->device->host->hostt, scmd);
|
||||
if (rtn == SUCCESS || rtn == FAST_IO_FAIL) {
|
||||
scmd->eh_eflags &= ~SCSI_EH_CANCEL_CMD;
|
||||
if (!scsi_device_online(scmd->device) ||
|
||||
|
@ -966,7 +972,6 @@ static int scsi_eh_abort_cmds(struct list_head *work_q,
|
|||
!scsi_eh_tur(scmd)) {
|
||||
scsi_eh_finish_cmd(scmd, done_q);
|
||||
}
|
||||
|
||||
} else
|
||||
SCSI_LOG_ERROR_RECOVERY(3, printk("%s: aborting"
|
||||
" cmd failed:"
|
||||
|
@ -1414,7 +1419,6 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd)
|
|||
*/
|
||||
break;
|
||||
/* fallthrough */
|
||||
|
||||
case DID_BUS_BUSY:
|
||||
case DID_PARITY:
|
||||
goto maybe_retry;
|
||||
|
|
Loading…
Reference in New Issue