diff options
author | James Smart <james.smart@avagotech.com> | 2015-05-21 13:55:27 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Odin.com> | 2015-06-06 01:39:48 -0400 |
commit | e5abba4c6aa7f094d32c0115193516697da60df8 (patch) | |
tree | 532ce2e28bc29472d6ff658097de8fbdc4598554 /drivers/scsi/lpfc | |
parent | cc82355a6e6cb606125b849db7f9e9a10408d407 (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.c | 12 |
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, |