* [PATCH 21/22] lpfc 8.1.2 : Modify RSCN handling to unregister rpis on lost FCP_TARGETs immediately
@ 2006-02-08 15:43 James Smart
0 siblings, 0 replies; 2+ messages in thread
From: James Smart @ 2006-02-08 15:43 UTC (permalink / raw)
To: linux-scsi
Modify RSCN handling to unregister rpis on lost FCP_TARGETs immediately
Signed-off-by: James Smart <James.Smart@emulex.com>
--- a/drivers/scsi/lpfc/lpfc_ct.c
+++ b/drivers/scsi/lpfc/lpfc_ct.c
@@ -323,6 +323,7 @@ lpfc_ns_rsp(struct lpfc_hba * phba, stru
struct lpfc_sli_ct_request *Response =
(struct lpfc_sli_ct_request *) mp->virt;
struct lpfc_nodelist *ndlp = NULL;
+ struct lpfc_nodelist *next_ndlp;
struct lpfc_dmabuf *mlast, *next_mp;
uint32_t *ctptr = (uint32_t *) & Response->un.gid.PortType;
uint32_t Did;
@@ -391,8 +392,36 @@ lpfc_ns_rsp(struct lpfc_hba * phba, stru
nsout1:
list_del(&head);
- /* Here we are finished in the case RSCN */
+ /*
+ * The driver has cycled through all Nports in the RSCN payload.
+ * Complete the handling by cleaning up and marking the
+ * current driver state.
+ */
if (phba->hba_state == LPFC_HBA_READY) {
+
+ /*
+ * Switch ports that connect a loop of multiple targets need
+ * special consideration. The driver wants to unregister the
+ * rpi only on the target that was pulled from the loop. On
+ * RSCN, the driver wants to rediscover an NPort only if the
+ * driver flagged it as NLP_NPR_2B_DISC. Provided adisc is
+ * not enabled and the NPort is not capable of retransmissions
+ * (FC Tape) prevent timing races with the scsi error handler by
+ * unregistering the Nport's RPI. This action causes all
+ * outstanding IO to flush back to the midlayer.
+ */
+ list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_npr_list,
+ nlp_listp) {
+ if (!(ndlp->nlp_flag & NLP_NPR_2B_DISC) &&
+ (lpfc_rscn_payload_check(phba, ndlp->nlp_DID))) {
+ if ((phba->cfg_use_adisc == 0) &&
+ !(ndlp->nlp_fcp_info &
+ NLP_FCP_2_DEVICE)) {
+ lpfc_unreg_rpi(phba, ndlp);
+ ndlp->nlp_flag &= ~NLP_NPR_ADISC;
+ }
+ }
+ }
lpfc_els_flush_rscn(phba);
spin_lock_irq(phba->host->host_lock);
phba->fc_flag |= FC_RSCN_MODE; /* we are still in RSCN mode */
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH 21/22] lpfc 8.1.2: Modify RSCN handling to unregister rpis on lost FCP_TARGETs immediately
@ 2006-03-01 0:25 Jamie Wellnitz
0 siblings, 0 replies; 2+ messages in thread
From: Jamie Wellnitz @ 2006-03-01 0:25 UTC (permalink / raw)
To: linux-scsi
Modify RSCN handling to unregister rpis on lost FCP_TARGETs immediately
Signed-off-by: Jamie Wellnitz <Jamie.Wellnitz@emulex.com>
--- a/drivers/scsi/lpfc/lpfc_ct.c
+++ b/drivers/scsi/lpfc/lpfc_ct.c
@@ -323,6 +323,7 @@ lpfc_ns_rsp(struct lpfc_hba * phba, stru
struct lpfc_sli_ct_request *Response =
(struct lpfc_sli_ct_request *) mp->virt;
struct lpfc_nodelist *ndlp = NULL;
+ struct lpfc_nodelist *next_ndlp;
struct lpfc_dmabuf *mlast, *next_mp;
uint32_t *ctptr = (uint32_t *) & Response->un.gid.PortType;
uint32_t Did;
@@ -391,8 +392,36 @@ lpfc_ns_rsp(struct lpfc_hba * phba, stru
nsout1:
list_del(&head);
- /* Here we are finished in the case RSCN */
+ /*
+ * The driver has cycled through all Nports in the RSCN payload.
+ * Complete the handling by cleaning up and marking the
+ * current driver state.
+ */
if (phba->hba_state == LPFC_HBA_READY) {
+
+ /*
+ * Switch ports that connect a loop of multiple targets need
+ * special consideration. The driver wants to unregister the
+ * rpi only on the target that was pulled from the loop. On
+ * RSCN, the driver wants to rediscover an NPort only if the
+ * driver flagged it as NLP_NPR_2B_DISC. Provided adisc is
+ * not enabled and the NPort is not capable of retransmissions
+ * (FC Tape) prevent timing races with the scsi error handler by
+ * unregistering the Nport's RPI. This action causes all
+ * outstanding IO to flush back to the midlayer.
+ */
+ list_for_each_entry_safe(ndlp, next_ndlp, &phba->fc_npr_list,
+ nlp_listp) {
+ if (!(ndlp->nlp_flag & NLP_NPR_2B_DISC) &&
+ (lpfc_rscn_payload_check(phba, ndlp->nlp_DID))) {
+ if ((phba->cfg_use_adisc == 0) &&
+ !(ndlp->nlp_fcp_info &
+ NLP_FCP_2_DEVICE)) {
+ lpfc_unreg_rpi(phba, ndlp);
+ ndlp->nlp_flag &= ~NLP_NPR_ADISC;
+ }
+ }
+ }
lpfc_els_flush_rscn(phba);
spin_lock_irq(phba->host->host_lock);
phba->fc_flag |= FC_RSCN_MODE; /* we are still in RSCN mode */
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2006-03-01 0:25 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-08 15:43 [PATCH 21/22] lpfc 8.1.2 : Modify RSCN handling to unregister rpis on lost FCP_TARGETs immediately James Smart
-- strict thread matches above, loose matches on Subject: below --
2006-03-01 0:25 [PATCH 21/22] lpfc 8.1.2: " Jamie Wellnitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).