diff options
Diffstat (limited to 'drivers/scsi/scsi_error.c')
| -rw-r--r-- | drivers/scsi/scsi_error.c | 20 | 
1 files changed, 11 insertions, 9 deletions
| diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 9a6f8468225f..bc5ff6ff9c79 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -459,14 +459,6 @@ static int scsi_check_sense(struct scsi_cmnd *scmd)  	if (! scsi_command_normalize_sense(scmd, &sshdr))  		return FAILED;	/* no valid sense data */ -	if (scmd->cmnd[0] == TEST_UNIT_READY && scmd->scsi_done != scsi_eh_done) -		/* -		 * nasty: for mid-layer issued TURs, we need to return the -		 * actual sense data without any recovery attempt.  For eh -		 * issued ones, we need to try to recover and interpret -		 */ -		return SUCCESS; -  	scsi_report_sense(sdev, &sshdr);  	if (scsi_sense_is_deferred(&sshdr)) @@ -482,6 +474,14 @@ static int 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) +		/* +		 * nasty: for mid-layer issued TURs, we need to return the +		 * actual sense data without any recovery attempt.  For eh +		 * issued ones, we need to try to recover and interpret +		 */ +		return SUCCESS; +  	/*  	 * Previous logic looked for FILEMARK, EOM or ILI which are  	 * mainly associated with tapes and returned SUCCESS. @@ -2001,8 +2001,10 @@ static void scsi_restart_operations(struct Scsi_Host *shost)  	 * is no point trying to lock the door of an off-line device.  	 */  	shost_for_each_device(sdev, shost) { -		if (scsi_device_online(sdev) && sdev->locked) +		if (scsi_device_online(sdev) && sdev->was_reset && sdev->locked) {  			scsi_eh_lock_door(sdev); +			sdev->was_reset = 0; +		}  	}  	/* |