scsi: lpfc: Remove duplicate ndlp kref decrement in lpfc_cleanup_rpis()
With faulty cables in PT2PT topology, an unintentional ndlp double kref decrement can occur. If a FLOGI request is outstanding before the link goes down, the missing FLOGI_ACC causes an F_Port ndlp to remain in the UNUSED state. During link down, lpfc_cleanup_rpis() is called and decrements an ndlp kref. Additionally, when the driver later decides to abort the FLOGI, the FLOGI completion handler decrements the ndlp kref a second time. Remove duplicate clean up logic in lpfc_cleanup_rpis() because the updated FLOGI completion handler already handles the ndlp kref decrement. Signed-off-by: Justin Tee <justin.tee@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
f81395570e
commit
ecdf4ddf4e
|
@ -1129,21 +1129,6 @@ lpfc_cleanup_rpis(struct lpfc_vport *vport, int remove)
|
|||
struct lpfc_nodelist *ndlp, *next_ndlp;
|
||||
|
||||
list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, nlp_listp) {
|
||||
if (ndlp->nlp_state == NLP_STE_UNUSED_NODE) {
|
||||
/* It's possible the FLOGI to the fabric node never
|
||||
* successfully completed and never registered with the
|
||||
* transport. In this case there is no way to clean up
|
||||
* the node.
|
||||
*/
|
||||
if (ndlp->nlp_DID == Fabric_DID) {
|
||||
if (ndlp->nlp_prev_state ==
|
||||
NLP_STE_UNUSED_NODE &&
|
||||
!ndlp->fc4_xpt_flags)
|
||||
lpfc_nlp_put(ndlp);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((phba->sli3_options & LPFC_SLI3_VPORT_TEARDOWN) ||
|
||||
((vport->port_type == LPFC_NPIV_PORT) &&
|
||||
((ndlp->nlp_DID == NameServer_DID) ||
|
||||
|
|
Loading…
Reference in New Issue