Skip to content

Commit

Permalink
[SCSI] clean up scsi_times_out
Browse files Browse the repository at this point in the history
Make sure the control flow in scsi_times_out makes sense.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
  • Loading branch information
Christoph Hellwig authored and James Bottomley committed Jan 2, 2009
1 parent 327d0c7 commit fa99078
Showing 1 changed file with 6 additions and 18 deletions.
24 changes: 6 additions & 18 deletions drivers/scsi/scsi_error.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,34 +124,22 @@ int scsi_eh_scmd_add(struct scsi_cmnd *scmd, int eh_flag)
enum blk_eh_timer_return scsi_times_out(struct request *req)
{
struct scsi_cmnd *scmd = req->special;
enum blk_eh_timer_return (*eh_timed_out)(struct scsi_cmnd *);
enum blk_eh_timer_return rtn = BLK_EH_NOT_HANDLED;

scsi_log_completion(scmd, TIMEOUT_ERROR);

if (scmd->device->host->transportt->eh_timed_out)
eh_timed_out = 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)
eh_timed_out = scmd->device->host->hostt->eh_timed_out;
else
eh_timed_out = NULL;
rtn = scmd->device->host->hostt->eh_timed_out(scmd);

if (eh_timed_out) {
rtn = eh_timed_out(scmd);
switch (rtn) {
case BLK_EH_NOT_HANDLED:
break;
default:
return rtn;
}
}

if (unlikely(!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD))) {
if (unlikely(rtn == BLK_EH_NOT_HANDLED &&
!scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD))) {
scmd->result |= DID_TIME_OUT << 16;
return BLK_EH_HANDLED;
rtn = BLK_EH_HANDLED;
}

return BLK_EH_NOT_HANDLED;
return rtn;
}

/**
Expand Down

0 comments on commit fa99078

Please sign in to comment.