aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_lib.c
diff options
context:
space:
mode:
authorMike Christie <michaelc@cs.wisc.edu>2008-08-19 19:45:31 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-10-13 09:28:52 -0400
commit4a27446f3e39b06c28d1c8e31d33a5340826ed5c (patch)
treee55c982632ab6e0a8484f8267fce8f159b6f78dc /drivers/scsi/scsi_lib.c
parent6000a368cd8e6da1caf101411bdb494cd6fb8b09 (diff)
[SCSI] modify scsi to handle new fail fast flags.
This checks the errors the scsi-ml determined were retryable and returns if we should fast fail it based on the request fail fast flags. Without the patch, drivers like lpfc, qla2xxx and fcoe would return DID_ERROR for what it determines is a temporary communication problem. There is no loss of connectivity at that time and the driver thinks that it would be fast to retry at the driver level. SCSI-ml will however sees fast fail on the request and DID_ERROR and will fast fail the io. This will then cause dm-multipath to fail the path and possibley switch target controllers when we should be retrying at the scsi layer. We also were fast failing device errors to dm multiapth when unless the scsi_dh modules think otherwis we want to retry at the scsi layer because multipath can only retry the IO like scsi should have done. multipath is a little dumber though because it does not what the error was for and assumes that it should fail the paths. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
-rw-r--r--drivers/scsi/scsi_lib.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 91c74c55aa5..e5a9526d203 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -706,7 +706,7 @@ static struct scsi_cmnd *scsi_end_request(struct scsi_cmnd *cmd, int error,
706 leftover = req->data_len; 706 leftover = req->data_len;
707 707
708 /* kill remainder if no retrys */ 708 /* kill remainder if no retrys */
709 if (error && blk_noretry_request(req)) 709 if (error && scsi_noretry_cmd(cmd))
710 blk_end_request(req, error, leftover); 710 blk_end_request(req, error, leftover);
711 else { 711 else {
712 if (requeue) { 712 if (requeue) {