diff options
author | Giridhar Malavali <giridhar.malavali@qlogic.com> | 2012-04-25 10:26:15 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-05-10 03:15:19 -0400 |
commit | 4aee57667e9b237d0bd0c5a167c8b6103a27756a (patch) | |
tree | 82e4ea64ed3b5ab19d34a3ff0dfbf0204f3948bc /drivers/scsi/qla2xxx | |
parent | a49393f2ae13e3a0c61dbdbea77c2ff7614df474 (diff) |
[SCSI] qla2xxx: Proper completion to scsi-ml for scsi status task_set_full and busy.
In case of firmmware detected under-run condition and scsi status of
task_set_full or busy_condition, return that to the mid layer for proper error
handling instead of DID_ERROR (which causes error handler activation and a
full retry).
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_dbg.c | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 15 |
2 files changed, 14 insertions, 3 deletions
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index 897731b93df2..62324a1d5573 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c | |||
@@ -15,7 +15,7 @@ | |||
15 | * | Mailbox commands | 0x113e | 0x112c-0x112e | | 15 | * | Mailbox commands | 0x113e | 0x112c-0x112e | |
16 | * | | | 0x113a | | 16 | * | | | 0x113a | |
17 | * | Device Discovery | 0x2086 | 0x2020-0x2022 | | 17 | * | Device Discovery | 0x2086 | 0x2020-0x2022 | |
18 | * | Queue Command and IO tracing | 0x302f | 0x3006,0x3008 | | 18 | * | Queue Command and IO tracing | 0x3030 | 0x3006,0x3008 | |
19 | * | | | 0x302d-0x302e | | 19 | * | | | 0x302d-0x302e | |
20 | * | DPC Thread | 0x401c | | | 20 | * | DPC Thread | 0x401c | | |
21 | * | Async Events | 0x505d | 0x502b-0x502f | | 21 | * | Async Events | 0x505d | 0x502b-0x502f | |
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index f79844ce7122..ce42288049b5 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -1715,13 +1715,24 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) | |||
1715 | res = DID_ERROR << 16; | 1715 | res = DID_ERROR << 16; |
1716 | break; | 1716 | break; |
1717 | } | 1717 | } |
1718 | } else { | 1718 | } else if (lscsi_status != SAM_STAT_TASK_SET_FULL && |
1719 | lscsi_status != SAM_STAT_BUSY) { | ||
1720 | /* | ||
1721 | * scsi status of task set and busy are considered to be | ||
1722 | * task not completed. | ||
1723 | */ | ||
1724 | |||
1719 | ql_dbg(ql_dbg_io, fcport->vha, 0x301f, | 1725 | ql_dbg(ql_dbg_io, fcport->vha, 0x301f, |
1720 | "Dropped frame(s) detected (0x%x " | 1726 | "Dropped frame(s) detected (0x%x " |
1721 | "of 0x%x bytes).\n", resid, scsi_bufflen(cp)); | 1727 | "of 0x%x bytes).\n", resid, |
1728 | scsi_bufflen(cp)); | ||
1722 | 1729 | ||
1723 | res = DID_ERROR << 16 | lscsi_status; | 1730 | res = DID_ERROR << 16 | lscsi_status; |
1724 | goto check_scsi_status; | 1731 | goto check_scsi_status; |
1732 | } else { | ||
1733 | ql_dbg(ql_dbg_io, fcport->vha, 0x3030, | ||
1734 | "scsi_status: 0x%x, lscsi_status: 0x%x\n", | ||
1735 | scsi_status, lscsi_status); | ||
1725 | } | 1736 | } |
1726 | 1737 | ||
1727 | res = DID_OK << 16 | lscsi_status; | 1738 | res = DID_OK << 16 | lscsi_status; |