aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_els.c
diff options
context:
space:
mode:
authorJames.Smart@Emulex.Com <James.Smart@Emulex.Com>2005-11-28 11:41:33 -0500
committerJames Bottomley <jejb@mulgrave.(none)>2005-12-13 20:16:01 -0500
commit6281bfe0002acd7765cb4afe0304c36962ad6b15 (patch)
treef67190c5ed4032dc501a07b5df233c2071892d67 /drivers/scsi/lpfc/lpfc_els.c
parent2fb70f79936e7180e8b0287a4053b8ba89182717 (diff)
[SCSI] lpfc 8.1.1 : Fixes for short cable pulls
Cause: Link bounces were causing discovery ELS's to be killed. Driver was not properly flushing ELS commands upon the subsequent link bounces. Thus, processing of ELS post link bounce erroneously assumed discovery failure and device loss. Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_els.c')
-rw-r--r--drivers/scsi/lpfc/lpfc_els.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index bcc29ec126dc..20f1a0713db2 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -720,6 +720,7 @@ lpfc_cmpl_els_plogi(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
720 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ 720 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */
721 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) && 721 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) &&
722 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) || 722 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) ||
723 (irsp->un.ulpWord[4] == IOERR_LINK_DOWN) ||
723 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) { 724 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) {
724 disc = (ndlp->nlp_flag & NLP_NPR_2B_DISC); 725 disc = (ndlp->nlp_flag & NLP_NPR_2B_DISC);
725 } 726 }
@@ -869,6 +870,7 @@ lpfc_cmpl_els_prli(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
869 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ 870 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */
870 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) && 871 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) &&
871 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) || 872 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) ||
873 (irsp->un.ulpWord[4] == IOERR_LINK_DOWN) ||
872 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) { 874 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) {
873 goto out; 875 goto out;
874 } 876 }
@@ -1054,6 +1056,7 @@ lpfc_cmpl_els_adisc(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
1054 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ 1056 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */
1055 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) && 1057 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) &&
1056 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) || 1058 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) ||
1059 (irsp->un.ulpWord[4] == IOERR_LINK_DOWN) ||
1057 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) { 1060 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) {
1058 disc = (ndlp->nlp_flag & NLP_NPR_2B_DISC); 1061 disc = (ndlp->nlp_flag & NLP_NPR_2B_DISC);
1059 } 1062 }
@@ -1205,6 +1208,7 @@ lpfc_cmpl_els_logo(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
1205 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */ 1208 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */
1206 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) && 1209 if ((irsp->ulpStatus == IOSTAT_LOCAL_REJECT) &&
1207 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) || 1210 ((irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) ||
1211 (irsp->un.ulpWord[4] == IOERR_LINK_DOWN) ||
1208 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) { 1212 (irsp->un.ulpWord[4] == IOERR_SLI_DOWN))) {
1209 goto out; 1213 goto out;
1210 } 1214 }