diff options
Diffstat (limited to 'drivers/scsi/scsi_error.c')
| -rw-r--r-- | drivers/scsi/scsi_error.c | 21 | 
1 files changed, 8 insertions, 13 deletions
| diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index b6c86cce57bf..a531336f6a0a 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -50,8 +50,6 @@  #include <asm/unaligned.h> -static void scsi_eh_done(struct scsi_cmnd *scmd); -  /*   * These should *probably* be handled by the host itself.   * Since it is allowed to sleep, it probably should. @@ -520,7 +518,8 @@ enum scsi_disposition scsi_check_sense(struct scsi_cmnd *scmd)  		/* handler does not care. Drop down to default handling */  	} -	if (scmd->cmnd[0] == TEST_UNIT_READY && scmd->scsi_done != scsi_eh_done) +	if (scmd->cmnd[0] == TEST_UNIT_READY && +	    scmd->submitter != SUBMITTED_BY_SCSI_ERROR_HANDLER)  		/*  		 * nasty: for mid-layer issued TURs, we need to return the  		 * actual sense data without any recovery attempt.  For eh @@ -782,7 +781,7 @@ static enum scsi_disposition scsi_eh_completed_normally(struct scsi_cmnd *scmd)   * scsi_eh_done - Completion function for error handling.   * @scmd:	Cmd that is done.   */ -static void scsi_eh_done(struct scsi_cmnd *scmd) +void scsi_eh_done(struct scsi_cmnd *scmd)  {  	struct completion *eh_action; @@ -1082,7 +1081,7 @@ retry:  	shost->eh_action = &done;  	scsi_log_send(scmd); -	scmd->scsi_done = scsi_eh_done; +	scmd->submitter = SUBMITTED_BY_SCSI_ERROR_HANDLER;  	/*  	 * Lock sdev->state_mutex to avoid that scsi_device_quiesce() can @@ -1109,6 +1108,7 @@ retry:  	if (rtn) {  		if (timeleft > stall_for) {  			scsi_eh_restore_cmnd(scmd, &ses); +  			timeleft -= stall_for;  			msleep(jiffies_to_msecs(stall_for));  			goto retry; @@ -1979,7 +1979,7 @@ maybe_retry:  static void eh_lock_door_done(struct request *req, blk_status_t status)  { -	blk_put_request(req); +	blk_mq_free_request(req);  }  /** @@ -1998,7 +1998,7 @@ static void scsi_eh_lock_door(struct scsi_device *sdev)  	struct request *req;  	struct scsi_request *rq; -	req = blk_get_request(sdev->request_queue, REQ_OP_DRV_IN, 0); +	req = scsi_alloc_request(sdev->request_queue, REQ_OP_DRV_IN, 0);  	if (IS_ERR(req))  		return;  	rq = scsi_req(req); @@ -2338,11 +2338,6 @@ void scsi_report_device_reset(struct Scsi_Host *shost, int channel, int target)  }  EXPORT_SYMBOL(scsi_report_device_reset); -static void -scsi_reset_provider_done_command(struct scsi_cmnd *scmd) -{ -} -  /**   * scsi_ioctl_reset: explicitly reset a host/bus/target/device   * @dev:	scsi_device to operate on @@ -2379,7 +2374,7 @@ scsi_ioctl_reset(struct scsi_device *dev, int __user *arg)  	scsi_init_command(dev, scmd);  	scmd->cmnd = scsi_req(rq)->cmd; -	scmd->scsi_done		= scsi_reset_provider_done_command; +	scmd->submitter = SUBMITTED_BY_SCSI_RESET_IOCTL;  	memset(&scmd->sdb, 0, sizeof(scmd->sdb));  	scmd->cmd_len			= 0; | 
