diff options
Diffstat (limited to 'drivers/scsi/scsi_error.c')
| -rw-r--r-- | drivers/scsi/scsi_error.c | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 2bf98469dc4..bbbc186dbc1 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -320,7 +320,7 @@ static int scsi_check_sense(struct scsi_cmnd *scmd)  				    "changed. The Linux SCSI layer does not "  				    "automatically adjust these parameters.\n"); -		if (blk_barrier_rq(scmd->request)) +		if (scmd->request->cmd_flags & REQ_HARDBARRIER)  			/*  			 * barrier requests should always retry on UA  			 * otherwise block will get a spurious error @@ -1331,16 +1331,16 @@ int scsi_noretry_cmd(struct scsi_cmnd *scmd)  	case DID_OK:  		break;  	case DID_BUS_BUSY: -		return blk_failfast_transport(scmd->request); +		return (scmd->request->cmd_flags & REQ_FAILFAST_TRANSPORT);  	case DID_PARITY: -		return blk_failfast_dev(scmd->request); +		return (scmd->request->cmd_flags & REQ_FAILFAST_DEV);  	case DID_ERROR:  		if (msg_byte(scmd->result) == COMMAND_COMPLETE &&  		    status_byte(scmd->result) == RESERVATION_CONFLICT)  			return 0;  		/* fall through */  	case DID_SOFT_ERROR: -		return blk_failfast_driver(scmd->request); +		return (scmd->request->cmd_flags & REQ_FAILFAST_DRIVER);  	}  	switch (status_byte(scmd->result)) { @@ -1349,7 +1349,9 @@ int scsi_noretry_cmd(struct scsi_cmnd *scmd)  		 * assume caller has checked sense and determinted  		 * the check condition was retryable.  		 */ -		return blk_failfast_dev(scmd->request); +		if (scmd->request->cmd_flags & REQ_FAILFAST_DEV || +		    scmd->request->cmd_type == REQ_TYPE_BLOCK_PC) +			return 1;  	}  	return 0;  |