aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc
diff options
context:
space:
mode:
authorJames Smart <james.smart@avagotech.com>2015-05-21 13:55:27 -0400
committerJames Bottomley <JBottomley@Odin.com>2015-06-06 01:39:48 -0400
commite5abba4c6aa7f094d32c0115193516697da60df8 (patch)
tree532ce2e28bc29472d6ff658097de8fbdc4598554 /drivers/scsi/lpfc
parentcc82355a6e6cb606125b849db7f9e9a10408d407 (diff)
lpfc: Correct loss of RSCNs during array takeaway/giveback testing.
Signed-off-by: Dick Kennedy <dick.kennedy@avagotech.com> Signed-off-by: James Smart <james.smart@avagotech.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Signed-off-by: James Bottomley <JBottomley@Odin.com>
Diffstat (limited to 'drivers/scsi/lpfc')
-rw-r--r--drivers/scsi/lpfc/lpfc_els.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index b490ef54d157..4d3d931b177a 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -1514,7 +1514,7 @@ lpfc_plogi_confirm_nport(struct lpfc_hba *phba, uint32_t *prsp,
1514 struct fc_rport *rport; 1514 struct fc_rport *rport;
1515 struct serv_parm *sp; 1515 struct serv_parm *sp;
1516 uint8_t name[sizeof(struct lpfc_name)]; 1516 uint8_t name[sizeof(struct lpfc_name)];
1517 uint32_t rc, keepDID = 0; 1517 uint32_t rc, keepDID = 0, keep_nlp_flag = 0;
1518 int put_node; 1518 int put_node;
1519 int put_rport; 1519 int put_rport;
1520 unsigned long *active_rrqs_xri_bitmap = NULL; 1520 unsigned long *active_rrqs_xri_bitmap = NULL;
@@ -1603,9 +1603,9 @@ lpfc_plogi_confirm_nport(struct lpfc_hba *phba, uint32_t *prsp,
1603 ndlp->active_rrqs_xri_bitmap, 1603 ndlp->active_rrqs_xri_bitmap,
1604 phba->cfg_rrq_xri_bitmap_sz); 1604 phba->cfg_rrq_xri_bitmap_sz);
1605 1605
1606 if (ndlp->nlp_flag & NLP_NPR_2B_DISC) 1606 keep_nlp_flag = new_ndlp->nlp_flag;
1607 new_ndlp->nlp_flag |= NLP_NPR_2B_DISC; 1607 new_ndlp->nlp_flag = ndlp->nlp_flag;
1608 ndlp->nlp_flag &= ~NLP_NPR_2B_DISC; 1608 ndlp->nlp_flag = keep_nlp_flag;
1609 1609
1610 /* Set state will put new_ndlp on to node list if not already done */ 1610 /* Set state will put new_ndlp on to node list if not already done */
1611 lpfc_nlp_set_state(vport, new_ndlp, ndlp->nlp_state); 1611 lpfc_nlp_set_state(vport, new_ndlp, ndlp->nlp_state);
@@ -1648,7 +1648,9 @@ lpfc_plogi_confirm_nport(struct lpfc_hba *phba, uint32_t *prsp,
1648 memcpy(ndlp->active_rrqs_xri_bitmap, 1648 memcpy(ndlp->active_rrqs_xri_bitmap,
1649 active_rrqs_xri_bitmap, 1649 active_rrqs_xri_bitmap,
1650 phba->cfg_rrq_xri_bitmap_sz); 1650 phba->cfg_rrq_xri_bitmap_sz);
1651 lpfc_drop_node(vport, ndlp); 1651
1652 if (!NLP_CHK_NODE_ACT(ndlp))
1653 lpfc_drop_node(vport, ndlp);
1652 } 1654 }
1653 else { 1655 else {
1654 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS, 1656 lpfc_printf_vlog(vport, KERN_INFO, LOG_ELS,