Lines Matching refs:ndlp

79 lpfc_valid_xpt_node(struct lpfc_nodelist *ndlp)  in lpfc_valid_xpt_node()  argument
81 if (ndlp->nlp_fc4_type || in lpfc_valid_xpt_node()
82 ndlp->nlp_type & NLP_FABRIC) in lpfc_valid_xpt_node()
96 struct lpfc_nodelist *ndlp; in lpfc_rport_invalid() local
110 ndlp = rdata->pnode; in lpfc_rport_invalid()
117 if (!ndlp->vport) { in lpfc_rport_invalid()
119 "SID x%x\n", __func__, ndlp, ndlp->nlp_DID, rport, in lpfc_rport_invalid()
130 struct lpfc_nodelist *ndlp; in lpfc_terminate_rport_io() local
137 ndlp = rdata->pnode; in lpfc_terminate_rport_io()
138 vport = ndlp->vport; in lpfc_terminate_rport_io()
141 ndlp->nlp_sid, ndlp->nlp_DID, ndlp->nlp_flag); in lpfc_terminate_rport_io()
143 if (ndlp->nlp_sid != NLP_NO_SID) in lpfc_terminate_rport_io()
144 lpfc_sli_abort_iocb(vport, ndlp->nlp_sid, 0, LPFC_CTX_TGT); in lpfc_terminate_rport_io()
153 struct lpfc_nodelist *ndlp; in lpfc_dev_loss_tmo_callbk() local
159 ndlp = ((struct lpfc_rport_data *)rport->dd_data)->pnode; in lpfc_dev_loss_tmo_callbk()
160 if (!ndlp) in lpfc_dev_loss_tmo_callbk()
163 vport = ndlp->vport; in lpfc_dev_loss_tmo_callbk()
168 ndlp->nlp_sid, ndlp->nlp_DID, ndlp->nlp_flag); in lpfc_dev_loss_tmo_callbk()
170 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE, in lpfc_dev_loss_tmo_callbk()
173 ndlp->nlp_DID, ndlp->rport, ndlp->nlp_flag, in lpfc_dev_loss_tmo_callbk()
174 vport->load_flag, kref_read(&ndlp->kref), in lpfc_dev_loss_tmo_callbk()
175 ndlp->nlp_state, ndlp->fc4_xpt_flags); in lpfc_dev_loss_tmo_callbk()
182 ndlp->rport = NULL; in lpfc_dev_loss_tmo_callbk()
184 ndlp->fc4_xpt_flags &= ~SCSI_XPT_REGD; in lpfc_dev_loss_tmo_callbk()
188 if (ndlp->fc4_xpt_flags == NLP_XPT_REGD) in lpfc_dev_loss_tmo_callbk()
189 ndlp->fc4_xpt_flags &= ~NLP_XPT_REGD; in lpfc_dev_loss_tmo_callbk()
194 lpfc_nlp_put(ndlp); in lpfc_dev_loss_tmo_callbk()
198 if (ndlp->nlp_state == NLP_STE_MAPPED_NODE) in lpfc_dev_loss_tmo_callbk()
201 if (rport->port_name != wwn_to_u64(ndlp->nlp_portname.u.wwn)) in lpfc_dev_loss_tmo_callbk()
205 wwn_to_u64(ndlp->nlp_portname.u.wwn)); in lpfc_dev_loss_tmo_callbk()
207 evtp = &ndlp->dev_loss_evt; in lpfc_dev_loss_tmo_callbk()
216 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_callbk()
217 ndlp->nlp_flag |= NLP_IN_DEV_LOSS; in lpfc_dev_loss_tmo_callbk()
222 if (ndlp->nlp_state != NLP_STE_PLOGI_ISSUE) in lpfc_dev_loss_tmo_callbk()
223 ndlp->nlp_flag &= ~NLP_NPR_2B_DISC; in lpfc_dev_loss_tmo_callbk()
229 ndlp->fc4_xpt_flags &= ~SCSI_XPT_REGD; in lpfc_dev_loss_tmo_callbk()
231 ndlp->rport = NULL; in lpfc_dev_loss_tmo_callbk()
232 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_callbk()
238 evtp->evt_arg1 = lpfc_nlp_get(ndlp); in lpfc_dev_loss_tmo_callbk()
248 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE, in lpfc_dev_loss_tmo_callbk()
251 "%d\n", __func__, ndlp->nlp_DID, in lpfc_dev_loss_tmo_callbk()
252 ndlp->rport, ndlp->nlp_flag, in lpfc_dev_loss_tmo_callbk()
253 vport->load_flag, kref_read(&ndlp->kref)); in lpfc_dev_loss_tmo_callbk()
254 if (!(ndlp->fc4_xpt_flags & NVME_XPT_REGD)) { in lpfc_dev_loss_tmo_callbk()
255 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_callbk()
257 ndlp->nlp_flag &= ~NLP_IN_DEV_LOSS; in lpfc_dev_loss_tmo_callbk()
258 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_callbk()
259 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_dev_loss_tmo_callbk()
383 struct lpfc_nodelist *ndlp) in lpfc_check_nlp_post_devloss() argument
387 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_check_nlp_post_devloss()
388 if (ndlp->save_flags & NLP_IN_RECOV_POST_DEV_LOSS) { in lpfc_check_nlp_post_devloss()
389 ndlp->save_flags &= ~NLP_IN_RECOV_POST_DEV_LOSS; in lpfc_check_nlp_post_devloss()
390 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_check_nlp_post_devloss()
391 lpfc_nlp_get(ndlp); in lpfc_check_nlp_post_devloss()
396 ndlp->nlp_DID, kref_read(&ndlp->kref), ndlp, in lpfc_check_nlp_post_devloss()
397 ndlp->nlp_flag, vport->port_state); in lpfc_check_nlp_post_devloss()
398 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_check_nlp_post_devloss()
400 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_check_nlp_post_devloss()
414 lpfc_dev_loss_tmo_handler(struct lpfc_nodelist *ndlp) in lpfc_dev_loss_tmo_handler() argument
425 vport = ndlp->vport; in lpfc_dev_loss_tmo_handler()
426 name = (uint8_t *)&ndlp->nlp_portname; in lpfc_dev_loss_tmo_handler()
434 ndlp->nlp_DID, ndlp->nlp_type, ndlp->nlp_sid); in lpfc_dev_loss_tmo_handler()
436 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE, in lpfc_dev_loss_tmo_handler()
438 __func__, ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_dev_loss_tmo_handler()
439 ndlp->fc4_xpt_flags, kref_read(&ndlp->kref)); in lpfc_dev_loss_tmo_handler()
442 if (ndlp->nlp_state == NLP_STE_MAPPED_NODE) { in lpfc_dev_loss_tmo_handler()
449 ndlp->nlp_DID); in lpfc_dev_loss_tmo_handler()
451 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_handler()
452 ndlp->nlp_flag &= ~NLP_IN_DEV_LOSS; in lpfc_dev_loss_tmo_handler()
453 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_handler()
458 if (ndlp->nlp_type & NLP_FABRIC) { in lpfc_dev_loss_tmo_handler()
459 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_handler()
467 switch (ndlp->nlp_DID) { in lpfc_dev_loss_tmo_handler()
482 if (ndlp->nlp_flag & NLP_REG_LOGIN_SEND) in lpfc_dev_loss_tmo_handler()
488 if (ndlp->nlp_state >= NLP_STE_PLOGI_ISSUE && in lpfc_dev_loss_tmo_handler()
489 ndlp->nlp_state <= NLP_STE_REG_LOGIN_ISSUE) in lpfc_dev_loss_tmo_handler()
493 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_handler()
505 ndlp->nlp_DID, kref_read(&ndlp->kref), in lpfc_dev_loss_tmo_handler()
506 ndlp, ndlp->nlp_flag, in lpfc_dev_loss_tmo_handler()
508 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_handler()
509 ndlp->save_flags |= NLP_IN_RECOV_POST_DEV_LOSS; in lpfc_dev_loss_tmo_handler()
510 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_handler()
511 } else if (ndlp->nlp_state == NLP_STE_UNMAPPED_NODE) { in lpfc_dev_loss_tmo_handler()
521 ndlp->nlp_DID, kref_read(&ndlp->kref), in lpfc_dev_loss_tmo_handler()
522 ndlp, ndlp->nlp_flag, in lpfc_dev_loss_tmo_handler()
527 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_handler()
528 ndlp->nlp_flag &= ~NLP_IN_DEV_LOSS; in lpfc_dev_loss_tmo_handler()
529 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_handler()
530 lpfc_nlp_put(ndlp); in lpfc_dev_loss_tmo_handler()
534 if (ndlp->nlp_sid != NLP_NO_SID) { in lpfc_dev_loss_tmo_handler()
536 lpfc_sli_abort_iocb(vport, ndlp->nlp_sid, 0, LPFC_CTX_TGT); in lpfc_dev_loss_tmo_handler()
546 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_dev_loss_tmo_handler()
547 ndlp->nlp_state, ndlp->nlp_rpi, in lpfc_dev_loss_tmo_handler()
548 kref_read(&ndlp->kref)); in lpfc_dev_loss_tmo_handler()
556 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_dev_loss_tmo_handler()
557 ndlp->nlp_state, ndlp->nlp_rpi); in lpfc_dev_loss_tmo_handler()
563 if (ndlp->nlp_state >= NLP_STE_PLOGI_ISSUE && in lpfc_dev_loss_tmo_handler()
564 ndlp->nlp_state <= NLP_STE_PRLI_ISSUE) { in lpfc_dev_loss_tmo_handler()
568 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_handler()
569 ndlp->nlp_flag &= ~NLP_IN_DEV_LOSS; in lpfc_dev_loss_tmo_handler()
570 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_dev_loss_tmo_handler()
571 if (!(ndlp->fc4_xpt_flags & NVME_XPT_REGD)) in lpfc_dev_loss_tmo_handler()
572 lpfc_disc_state_machine(vport, ndlp, NULL, NLP_EVT_DEVICE_RM); in lpfc_dev_loss_tmo_handler()
795 struct lpfc_nodelist *ndlp; in lpfc_work_list_done() local
810 ndlp = (struct lpfc_nodelist *) (evtp->evt_arg1); in lpfc_work_list_done()
812 lpfc_els_retry_delay_handler(ndlp); in lpfc_work_list_done()
818 lpfc_nlp_put(ndlp); in lpfc_work_list_done()
821 ndlp = (struct lpfc_nodelist *)(evtp->evt_arg1); in lpfc_work_list_done()
822 fcf_inuse = lpfc_dev_loss_tmo_handler(ndlp); in lpfc_work_list_done()
827 nlp_did = ndlp->nlp_DID; in lpfc_work_list_done()
828 lpfc_nlp_put(ndlp); in lpfc_work_list_done()
835 ndlp = (struct lpfc_nodelist *)(evtp->evt_arg1); in lpfc_work_list_done()
837 lpfc_sli_abts_recover_port(ndlp->vport, ndlp); in lpfc_work_list_done()
843 lpfc_nlp_put(ndlp); in lpfc_work_list_done()
1129 struct lpfc_nodelist *ndlp, *next_ndlp; in lpfc_cleanup_rpis() local
1131 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, nlp_listp) { in lpfc_cleanup_rpis()
1134 ((ndlp->nlp_DID == NameServer_DID) || in lpfc_cleanup_rpis()
1135 (ndlp->nlp_DID == FDMI_DID) || in lpfc_cleanup_rpis()
1136 (ndlp->nlp_DID == Fabric_Cntl_DID)))) in lpfc_cleanup_rpis()
1137 lpfc_unreg_rpi(vport, ndlp); in lpfc_cleanup_rpis()
1141 (!remove && ndlp->nlp_type & NLP_FABRIC)) in lpfc_cleanup_rpis()
1146 ndlp->nlp_state == NLP_STE_UNMAPPED_NODE) in lpfc_cleanup_rpis()
1147 lpfc_nvmet_invalidate_host(phba, ndlp); in lpfc_cleanup_rpis()
1149 lpfc_disc_state_machine(vport, ndlp, NULL, in lpfc_cleanup_rpis()
1313 struct lpfc_nodelist *ndlp; in lpfc_linkup_cleanup_nodes() local
1315 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) { in lpfc_linkup_cleanup_nodes()
1316 ndlp->nlp_fc4_type &= ~(NLP_FC4_FCP | NLP_FC4_NVME); in lpfc_linkup_cleanup_nodes()
1318 if (ndlp->nlp_state == NLP_STE_UNUSED_NODE) in lpfc_linkup_cleanup_nodes()
1320 if (ndlp->nlp_type & NLP_FABRIC) { in lpfc_linkup_cleanup_nodes()
1324 if (ndlp->nlp_DID != Fabric_DID) in lpfc_linkup_cleanup_nodes()
1325 lpfc_unreg_rpi(vport, ndlp); in lpfc_linkup_cleanup_nodes()
1326 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_linkup_cleanup_nodes()
1327 } else if (!(ndlp->nlp_flag & NLP_NPR_ADISC)) { in lpfc_linkup_cleanup_nodes()
1331 lpfc_unreg_rpi(vport, ndlp); in lpfc_linkup_cleanup_nodes()
3195 struct lpfc_nodelist *ndlp; in lpfc_init_vpi_cmpl() local
3212 ndlp = lpfc_findnode_did(vport, Fabric_DID); in lpfc_init_vpi_cmpl()
3213 if (!ndlp) in lpfc_init_vpi_cmpl()
3219 lpfc_register_new_vport(phba, vport, ndlp); in lpfc_init_vpi_cmpl()
3851 struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp; in lpfc_mbx_cmpl_reg_login() local
3862 ndlp->nlp_rpi, ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_mbx_cmpl_reg_login()
3863 kref_read(&ndlp->kref), in lpfc_mbx_cmpl_reg_login()
3864 ndlp); in lpfc_mbx_cmpl_reg_login()
3865 if (ndlp->nlp_flag & NLP_REG_LOGIN_SEND) in lpfc_mbx_cmpl_reg_login()
3866 ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND; in lpfc_mbx_cmpl_reg_login()
3868 if (ndlp->nlp_flag & NLP_IGNR_REG_CMPL || in lpfc_mbx_cmpl_reg_login()
3869 ndlp->nlp_state != NLP_STE_REG_LOGIN_ISSUE) { in lpfc_mbx_cmpl_reg_login()
3878 spin_lock_irq(&ndlp->lock); in lpfc_mbx_cmpl_reg_login()
3879 ndlp->nlp_flag &= ~NLP_IGNR_REG_CMPL; in lpfc_mbx_cmpl_reg_login()
3880 spin_unlock_irq(&ndlp->lock); in lpfc_mbx_cmpl_reg_login()
3887 ndlp->nlp_flag |= NLP_RPI_REGISTERED; in lpfc_mbx_cmpl_reg_login()
3888 lpfc_unreg_rpi(vport, ndlp); in lpfc_mbx_cmpl_reg_login()
3892 lpfc_disc_state_machine(vport, ndlp, pmb, NLP_EVT_CMPL_REG_LOGIN); in lpfc_mbx_cmpl_reg_login()
3899 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_reg_login()
4170 struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp; in lpfc_mbx_cmpl_fabric_reg_login() local
4189 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_fabric_reg_login()
4197 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_fabric_reg_login()
4202 ndlp->nlp_rpi = mb->un.varWords[0]; in lpfc_mbx_cmpl_fabric_reg_login()
4203 ndlp->nlp_flag |= NLP_RPI_REGISTERED; in lpfc_mbx_cmpl_fabric_reg_login()
4204 ndlp->nlp_type |= NLP_FABRIC; in lpfc_mbx_cmpl_fabric_reg_login()
4205 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_mbx_cmpl_fabric_reg_login()
4226 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_fabric_reg_login()
4315 struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp; in lpfc_mbx_cmpl_ns_reg_login() local
4331 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_ns_reg_login()
4338 if (!(ndlp->fc4_xpt_flags & (SCSI_XPT_REGD | NVME_XPT_REGD))) { in lpfc_mbx_cmpl_ns_reg_login()
4339 spin_lock_irq(&ndlp->lock); in lpfc_mbx_cmpl_ns_reg_login()
4340 ndlp->nlp_flag &= ~NLP_NPR_2B_DISC; in lpfc_mbx_cmpl_ns_reg_login()
4341 spin_unlock_irq(&ndlp->lock); in lpfc_mbx_cmpl_ns_reg_login()
4342 lpfc_nlp_not_used(ndlp); in lpfc_mbx_cmpl_ns_reg_login()
4361 ndlp->nlp_rpi = mb->un.varWords[0]; in lpfc_mbx_cmpl_ns_reg_login()
4362 ndlp->nlp_flag |= NLP_RPI_REGISTERED; in lpfc_mbx_cmpl_ns_reg_login()
4363 ndlp->nlp_type |= NLP_FABRIC; in lpfc_mbx_cmpl_ns_reg_login()
4364 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_mbx_cmpl_ns_reg_login()
4367 ndlp->nlp_rpi, ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_mbx_cmpl_ns_reg_login()
4368 kref_read(&ndlp->kref), in lpfc_mbx_cmpl_ns_reg_login()
4369 ndlp); in lpfc_mbx_cmpl_ns_reg_login()
4423 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_ns_reg_login()
4438 struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp; in lpfc_mbx_cmpl_fc_reg_login() local
4448 lpfc_check_nlp_post_devloss(vport, ndlp); in lpfc_mbx_cmpl_fc_reg_login()
4451 ndlp->nlp_rpi = mb->un.varWords[0]; in lpfc_mbx_cmpl_fc_reg_login()
4455 __func__, ndlp->nlp_DID, ndlp->nlp_rpi, in lpfc_mbx_cmpl_fc_reg_login()
4456 ndlp->nlp_state); in lpfc_mbx_cmpl_fc_reg_login()
4458 ndlp->nlp_flag |= NLP_RPI_REGISTERED; in lpfc_mbx_cmpl_fc_reg_login()
4459 ndlp->nlp_flag &= ~NLP_REG_LOGIN_SEND; in lpfc_mbx_cmpl_fc_reg_login()
4460 ndlp->nlp_type |= NLP_FABRIC; in lpfc_mbx_cmpl_fc_reg_login()
4461 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_mbx_cmpl_fc_reg_login()
4469 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_fc_reg_login()
4473 lpfc_register_remote_port(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_register_remote_port() argument
4486 rport_ids.node_name = wwn_to_u64(ndlp->nlp_nodename.u.wwn); in lpfc_register_remote_port()
4487 rport_ids.port_name = wwn_to_u64(ndlp->nlp_portname.u.wwn); in lpfc_register_remote_port()
4488 rport_ids.port_id = ndlp->nlp_DID; in lpfc_register_remote_port()
4494 ndlp->nlp_DID, ndlp->nlp_flag, ndlp->nlp_type); in lpfc_register_remote_port()
4503 if (ndlp->rport) { in lpfc_register_remote_port()
4504 rdata = ndlp->rport->dd_data; in lpfc_register_remote_port()
4508 ndlp->rport = rport = fc_remote_port_add(shost, 0, &rport_ids); in lpfc_register_remote_port()
4516 rport->maxframe_size = ndlp->nlp_maxframe; in lpfc_register_remote_port()
4517 rport->supported_classes = ndlp->nlp_class_sup; in lpfc_register_remote_port()
4519 rdata->pnode = lpfc_nlp_get(ndlp); in lpfc_register_remote_port()
4524 ndlp->rport = NULL; in lpfc_register_remote_port()
4528 spin_lock_irqsave(&ndlp->lock, flags); in lpfc_register_remote_port()
4529 ndlp->fc4_xpt_flags |= SCSI_XPT_REGD; in lpfc_register_remote_port()
4530 spin_unlock_irqrestore(&ndlp->lock, flags); in lpfc_register_remote_port()
4532 if (ndlp->nlp_type & NLP_FCP_TARGET) in lpfc_register_remote_port()
4534 if (ndlp->nlp_type & NLP_FCP_INITIATOR) in lpfc_register_remote_port()
4536 if (ndlp->nlp_type & NLP_NVME_INITIATOR) in lpfc_register_remote_port()
4538 if (ndlp->nlp_type & NLP_NVME_TARGET) in lpfc_register_remote_port()
4540 if (ndlp->nlp_type & NLP_NVME_DISCOVERY) in lpfc_register_remote_port()
4546 lpfc_printf_vlog(ndlp->vport, KERN_INFO, LOG_NODE, in lpfc_register_remote_port()
4549 kref_read(&ndlp->kref)); in lpfc_register_remote_port()
4553 ndlp->nlp_sid = rport->scsi_target_id; in lpfc_register_remote_port()
4560 lpfc_unregister_remote_port(struct lpfc_nodelist *ndlp) in lpfc_unregister_remote_port() argument
4562 struct fc_rport *rport = ndlp->rport; in lpfc_unregister_remote_port()
4563 struct lpfc_vport *vport = ndlp->vport; in lpfc_unregister_remote_port()
4570 ndlp->nlp_DID, ndlp->nlp_flag, ndlp->nlp_type); in lpfc_unregister_remote_port()
4575 ndlp->nlp_DID, rport, ndlp->fc4_xpt_flags, in lpfc_unregister_remote_port()
4576 kref_read(&ndlp->kref)); in lpfc_unregister_remote_port()
4579 lpfc_nlp_put(ndlp); in lpfc_unregister_remote_port()
4623 lpfc_nlp_reg_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_nlp_reg_node() argument
4627 lpfc_check_nlp_post_devloss(vport, ndlp); in lpfc_nlp_reg_node()
4629 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_nlp_reg_node()
4630 if (ndlp->fc4_xpt_flags & NLP_XPT_REGD) { in lpfc_nlp_reg_node()
4632 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_nlp_reg_node()
4634 if (ndlp->fc4_xpt_flags & NVME_XPT_REGD && in lpfc_nlp_reg_node()
4635 ndlp->nlp_type & (NLP_NVME_TARGET | NLP_NVME_DISCOVERY)) { in lpfc_nlp_reg_node()
4636 lpfc_nvme_rescan_port(vport, ndlp); in lpfc_nlp_reg_node()
4641 ndlp->fc4_xpt_flags |= NLP_XPT_REGD; in lpfc_nlp_reg_node()
4642 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_nlp_reg_node()
4644 if (lpfc_valid_xpt_node(ndlp)) { in lpfc_nlp_reg_node()
4650 lpfc_register_remote_port(vport, ndlp); in lpfc_nlp_reg_node()
4654 if (!(ndlp->nlp_fc4_type & NLP_FC4_NVME)) in lpfc_nlp_reg_node()
4659 ndlp->nlp_fc4_type & NLP_FC4_NVME) { in lpfc_nlp_reg_node()
4665 if (ndlp->nlp_type & NLP_NVME_TARGET) { in lpfc_nlp_reg_node()
4667 lpfc_nvme_register_port(vport, ndlp); in lpfc_nlp_reg_node()
4673 lpfc_nlp_get(ndlp); in lpfc_nlp_reg_node()
4680 lpfc_nlp_unreg_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_nlp_unreg_node() argument
4684 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_nlp_unreg_node()
4685 if (!(ndlp->fc4_xpt_flags & NLP_XPT_REGD)) { in lpfc_nlp_unreg_node()
4686 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_nlp_unreg_node()
4690 __func__, ndlp, ndlp->rport, ndlp->nlp_DID, in lpfc_nlp_unreg_node()
4691 ndlp->nlp_flag, ndlp->fc4_xpt_flags); in lpfc_nlp_unreg_node()
4695 ndlp->fc4_xpt_flags &= ~NLP_XPT_REGD; in lpfc_nlp_unreg_node()
4696 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_nlp_unreg_node()
4698 if (ndlp->rport && in lpfc_nlp_unreg_node()
4699 ndlp->fc4_xpt_flags & SCSI_XPT_REGD) { in lpfc_nlp_unreg_node()
4701 lpfc_unregister_remote_port(ndlp); in lpfc_nlp_unreg_node()
4702 } else if (!ndlp->rport) { in lpfc_nlp_unreg_node()
4706 __func__, ndlp, ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_nlp_unreg_node()
4707 ndlp->fc4_xpt_flags, in lpfc_nlp_unreg_node()
4708 kref_read(&ndlp->kref)); in lpfc_nlp_unreg_node()
4711 if (ndlp->fc4_xpt_flags & NVME_XPT_REGD) { in lpfc_nlp_unreg_node()
4715 if (ndlp->nlp_type & NLP_NVME_TARGET) in lpfc_nlp_unreg_node()
4716 lpfc_nvme_unregister_port(vport, ndlp); in lpfc_nlp_unreg_node()
4719 lpfc_nlp_put(ndlp); in lpfc_nlp_unreg_node()
4729 lpfc_handle_adisc_state(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_handle_adisc_state() argument
4746 ndlp->nlp_type |= NLP_FC_NODE; in lpfc_handle_adisc_state()
4749 ndlp->nlp_flag &= ~NLP_NODEV_REMOVE; in lpfc_handle_adisc_state()
4750 lpfc_nlp_reg_node(vport, ndlp); in lpfc_handle_adisc_state()
4760 ndlp->nlp_flag &= ~NLP_RCV_PLOGI; in lpfc_handle_adisc_state()
4763 lpfc_nlp_unreg_node(vport, ndlp); in lpfc_handle_adisc_state()
4770 lpfc_nlp_state_cleanup(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_nlp_state_cleanup() argument
4776 lpfc_handle_adisc_state(vport, ndlp, new_state); in lpfc_nlp_state_cleanup()
4781 ndlp->nlp_flag &= ~NLP_NODEV_REMOVE; in lpfc_nlp_state_cleanup()
4782 ndlp->nlp_type |= NLP_FC_NODE; in lpfc_nlp_state_cleanup()
4785 ndlp->nlp_flag &= ~NLP_NODEV_REMOVE; in lpfc_nlp_state_cleanup()
4787 ndlp->nlp_flag &= ~NLP_RCV_PLOGI; in lpfc_nlp_state_cleanup()
4795 if (!(ndlp->nlp_flag & NLP_NPR_ADISC) || in lpfc_nlp_state_cleanup()
4797 lpfc_nlp_unreg_node(vport, ndlp); in lpfc_nlp_state_cleanup()
4802 lpfc_nlp_reg_node(vport, ndlp); in lpfc_nlp_state_cleanup()
4811 (ndlp->nlp_type & NLP_FCP_TARGET) && in lpfc_nlp_state_cleanup()
4812 (!ndlp->rport || in lpfc_nlp_state_cleanup()
4813 ndlp->rport->scsi_target_id == -1 || in lpfc_nlp_state_cleanup()
4814 ndlp->rport->scsi_target_id >= LPFC_MAX_TARGET)) { in lpfc_nlp_state_cleanup()
4815 spin_lock_irq(&ndlp->lock); in lpfc_nlp_state_cleanup()
4816 ndlp->nlp_flag |= NLP_TGT_NO_SCSIID; in lpfc_nlp_state_cleanup()
4817 spin_unlock_irq(&ndlp->lock); in lpfc_nlp_state_cleanup()
4818 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_nlp_state_cleanup()
4845 lpfc_nlp_set_state(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_nlp_set_state() argument
4849 int old_state = ndlp->nlp_state; in lpfc_nlp_set_state()
4850 int node_dropped = ndlp->nlp_flag & NLP_DROPPED; in lpfc_nlp_set_state()
4855 ndlp->nlp_DID, in lpfc_nlp_set_state()
4861 ndlp->nlp_DID, old_state, state); in lpfc_nlp_set_state()
4865 ndlp->nlp_flag &= ~NLP_DROPPED; in lpfc_nlp_set_state()
4866 lpfc_nlp_get(ndlp); in lpfc_nlp_set_state()
4871 lpfc_cancel_retry_delay_tmo(vport, ndlp); in lpfc_nlp_set_state()
4873 ndlp->nlp_flag &= ~NLP_TGT_NO_SCSIID; in lpfc_nlp_set_state()
4874 ndlp->nlp_type &= ~NLP_FC_NODE; in lpfc_nlp_set_state()
4877 if (list_empty(&ndlp->nlp_listp)) { in lpfc_nlp_set_state()
4879 list_add_tail(&ndlp->nlp_listp, &vport->fc_nodes); in lpfc_nlp_set_state()
4884 ndlp->nlp_state = state; in lpfc_nlp_set_state()
4886 lpfc_nlp_state_cleanup(vport, ndlp, old_state, state); in lpfc_nlp_set_state()
4890 lpfc_enqueue_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_enqueue_node() argument
4894 if (list_empty(&ndlp->nlp_listp)) { in lpfc_enqueue_node()
4896 list_add_tail(&ndlp->nlp_listp, &vport->fc_nodes); in lpfc_enqueue_node()
4902 lpfc_dequeue_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_dequeue_node() argument
4906 lpfc_cancel_retry_delay_tmo(vport, ndlp); in lpfc_dequeue_node()
4907 if (ndlp->nlp_state && !list_empty(&ndlp->nlp_listp)) in lpfc_dequeue_node()
4908 lpfc_nlp_counters(vport, ndlp->nlp_state, -1); in lpfc_dequeue_node()
4910 list_del_init(&ndlp->nlp_listp); in lpfc_dequeue_node()
4912 lpfc_nlp_state_cleanup(vport, ndlp, ndlp->nlp_state, in lpfc_dequeue_node()
4931 lpfc_initialize_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_initialize_node() argument
4934 INIT_LIST_HEAD(&ndlp->els_retry_evt.evt_listp); in lpfc_initialize_node()
4935 INIT_LIST_HEAD(&ndlp->dev_loss_evt.evt_listp); in lpfc_initialize_node()
4936 timer_setup(&ndlp->nlp_delayfunc, lpfc_els_retry_delay, 0); in lpfc_initialize_node()
4937 INIT_LIST_HEAD(&ndlp->recovery_evt.evt_listp); in lpfc_initialize_node()
4939 ndlp->nlp_DID = did; in lpfc_initialize_node()
4940 ndlp->vport = vport; in lpfc_initialize_node()
4941 ndlp->phba = vport->phba; in lpfc_initialize_node()
4942 ndlp->nlp_sid = NLP_NO_SID; in lpfc_initialize_node()
4943 ndlp->nlp_fc4_type = NLP_FC4_NONE; in lpfc_initialize_node()
4944 kref_init(&ndlp->kref); in lpfc_initialize_node()
4945 atomic_set(&ndlp->cmd_pending, 0); in lpfc_initialize_node()
4946 ndlp->cmd_qdepth = vport->cfg_tgt_queue_depth; in lpfc_initialize_node()
4947 ndlp->nlp_defer_did = NLP_EVT_NOTHING_PENDING; in lpfc_initialize_node()
4951 lpfc_drop_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_drop_node() argument
4960 if (ndlp->nlp_state == NLP_STE_UNUSED_NODE) in lpfc_drop_node()
4962 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNUSED_NODE); in lpfc_drop_node()
4963 ndlp->nlp_flag |= NLP_DROPPED; in lpfc_drop_node()
4965 lpfc_cleanup_vports_rrqs(vport, ndlp); in lpfc_drop_node()
4966 lpfc_unreg_rpi(vport, ndlp); in lpfc_drop_node()
4969 lpfc_nlp_put(ndlp); in lpfc_drop_node()
5058 struct lpfc_nodelist *ndlp) in lpfc_check_sli_ndlp() argument
5060 struct lpfc_vport *vport = ndlp->vport; in lpfc_check_sli_ndlp()
5075 if (iocb->ndlp == ndlp) in lpfc_check_sli_ndlp()
5079 if (remote_id == ndlp->nlp_DID) in lpfc_check_sli_ndlp()
5083 if (iocb->ndlp == ndlp) in lpfc_check_sli_ndlp()
5088 if ((ndlp->nlp_type & NLP_FCP_TARGET) && in lpfc_check_sli_ndlp()
5089 (ndlp->nlp_flag & NLP_DELAY_TMO)) { in lpfc_check_sli_ndlp()
5092 if (ulp_context == ndlp->nlp_rpi) in lpfc_check_sli_ndlp()
5100 struct lpfc_nodelist *ndlp, struct lpfc_sli_ring *pring, in __lpfc_dequeue_nport_iocbs() argument
5107 if (lpfc_check_sli_ndlp(phba, pring, iocb, ndlp)) in __lpfc_dequeue_nport_iocbs()
5115 struct lpfc_nodelist *ndlp, struct list_head *dequeue_list) in lpfc_sli3_dequeue_nport_iocbs() argument
5122 __lpfc_dequeue_nport_iocbs(phba, ndlp, &psli->sli3_ring[i], in lpfc_sli3_dequeue_nport_iocbs()
5129 struct lpfc_nodelist *ndlp, struct list_head *dequeue_list) in lpfc_sli4_dequeue_nport_iocbs() argument
5140 __lpfc_dequeue_nport_iocbs(phba, ndlp, pring, dequeue_list); in lpfc_sli4_dequeue_nport_iocbs()
5151 lpfc_no_rpi(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) in lpfc_no_rpi() argument
5155 lpfc_fabric_abort_nport(ndlp); in lpfc_no_rpi()
5161 if (ndlp->nlp_flag & NLP_RPI_REGISTERED) { in lpfc_no_rpi()
5163 lpfc_sli3_dequeue_nport_iocbs(phba, ndlp, &completions); in lpfc_no_rpi()
5165 lpfc_sli4_dequeue_nport_iocbs(phba, ndlp, &completions); in lpfc_no_rpi()
5187 struct lpfc_nodelist *ndlp; in lpfc_nlp_logo_unreg() local
5189 ndlp = (struct lpfc_nodelist *)(pmb->ctx_ndlp); in lpfc_nlp_logo_unreg()
5190 if (!ndlp) in lpfc_nlp_logo_unreg()
5192 lpfc_issue_els_logo(vport, ndlp, 0); in lpfc_nlp_logo_unreg()
5195 if ((ndlp->nlp_flag & NLP_UNREG_INP) && in lpfc_nlp_logo_unreg()
5196 (ndlp->nlp_defer_did != NLP_EVT_NOTHING_PENDING)) { in lpfc_nlp_logo_unreg()
5200 ndlp->nlp_rpi, ndlp->nlp_DID, in lpfc_nlp_logo_unreg()
5201 ndlp->nlp_defer_did, ndlp); in lpfc_nlp_logo_unreg()
5203 ndlp->nlp_flag &= ~NLP_UNREG_INP; in lpfc_nlp_logo_unreg()
5204 ndlp->nlp_defer_did = NLP_EVT_NOTHING_PENDING; in lpfc_nlp_logo_unreg()
5205 lpfc_issue_els_plogi(vport, ndlp->nlp_DID, 0); in lpfc_nlp_logo_unreg()
5208 if (ndlp->nlp_flag & NLP_RELEASE_RPI) { in lpfc_nlp_logo_unreg()
5209 lpfc_sli4_free_rpi(vport->phba, ndlp->nlp_rpi); in lpfc_nlp_logo_unreg()
5210 spin_lock_irq(&ndlp->lock); in lpfc_nlp_logo_unreg()
5211 ndlp->nlp_flag &= ~NLP_RELEASE_RPI; in lpfc_nlp_logo_unreg()
5212 ndlp->nlp_rpi = LPFC_RPI_ALLOC_ERROR; in lpfc_nlp_logo_unreg()
5213 spin_unlock_irq(&ndlp->lock); in lpfc_nlp_logo_unreg()
5215 spin_lock_irq(&ndlp->lock); in lpfc_nlp_logo_unreg()
5216 ndlp->nlp_flag &= ~NLP_UNREG_INP; in lpfc_nlp_logo_unreg()
5217 spin_unlock_irq(&ndlp->lock); in lpfc_nlp_logo_unreg()
5224 lpfc_nlp_put(ndlp); in lpfc_nlp_logo_unreg()
5235 struct lpfc_nodelist *ndlp, LPFC_MBOXQ_t *mbox) in lpfc_set_unreg_login_mbx_cmpl() argument
5242 mbox->ctx_ndlp = lpfc_nlp_get(ndlp); in lpfc_set_unreg_login_mbx_cmpl()
5246 if (ndlp->nlp_flag & NLP_ISSUE_LOGO) { in lpfc_set_unreg_login_mbx_cmpl()
5253 (kref_read(&ndlp->kref) > 0)) { in lpfc_set_unreg_login_mbx_cmpl()
5258 spin_lock_irqsave(&ndlp->lock, iflags); in lpfc_set_unreg_login_mbx_cmpl()
5259 ndlp->nlp_flag |= NLP_RELEASE_RPI; in lpfc_set_unreg_login_mbx_cmpl()
5260 spin_unlock_irqrestore(&ndlp->lock, iflags); in lpfc_set_unreg_login_mbx_cmpl()
5277 lpfc_unreg_rpi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_unreg_rpi() argument
5284 if (ndlp->nlp_flag & NLP_RPI_REGISTERED || in lpfc_unreg_rpi()
5285 ndlp->nlp_flag & NLP_REG_LOGIN_SEND) { in lpfc_unreg_rpi()
5286 if (ndlp->nlp_flag & NLP_REG_LOGIN_SEND) in lpfc_unreg_rpi()
5292 ndlp->nlp_rpi, ndlp->nlp_flag, in lpfc_unreg_rpi()
5293 ndlp->nlp_DID); in lpfc_unreg_rpi()
5298 if (ndlp->nlp_flag & NLP_UNREG_INP) { in lpfc_unreg_rpi()
5304 ndlp->nlp_rpi, ndlp->nlp_DID, in lpfc_unreg_rpi()
5305 ndlp->nlp_defer_did, in lpfc_unreg_rpi()
5306 ndlp->nlp_flag, ndlp); in lpfc_unreg_rpi()
5313 rpi = ndlp->nlp_rpi; in lpfc_unreg_rpi()
5315 rpi = phba->sli4_hba.rpi_ids[ndlp->nlp_rpi]; in lpfc_unreg_rpi()
5319 lpfc_set_unreg_login_mbx_cmpl(phba, vport, ndlp, mbox); in lpfc_unreg_rpi()
5330 if (((ndlp->nlp_DID & Fabric_DID_MASK) != in lpfc_unreg_rpi()
5333 ndlp->nlp_flag |= NLP_UNREG_INP; in lpfc_unreg_rpi()
5340 ndlp->nlp_rpi, ndlp->nlp_DID, in lpfc_unreg_rpi()
5341 ndlp->nlp_flag, ndlp); in lpfc_unreg_rpi()
5345 ndlp->nlp_flag &= ~NLP_UNREG_INP; in lpfc_unreg_rpi()
5348 lpfc_nlp_put(ndlp); in lpfc_unreg_rpi()
5357 ndlp->nlp_rpi, ndlp->nlp_DID, in lpfc_unreg_rpi()
5358 ndlp->nlp_flag, ndlp); in lpfc_unreg_rpi()
5365 ndlp->nlp_flag &= ~NLP_UNREG_INP; in lpfc_unreg_rpi()
5366 lpfc_issue_els_logo(vport, ndlp, 0); in lpfc_unreg_rpi()
5367 ndlp->nlp_prev_state = ndlp->nlp_state; in lpfc_unreg_rpi()
5368 lpfc_nlp_set_state(vport, ndlp, in lpfc_unreg_rpi()
5374 lpfc_no_rpi(phba, ndlp); in lpfc_unreg_rpi()
5377 ndlp->nlp_rpi = 0; in lpfc_unreg_rpi()
5378 ndlp->nlp_flag &= ~NLP_RPI_REGISTERED; in lpfc_unreg_rpi()
5379 ndlp->nlp_flag &= ~NLP_NPR_ADISC; in lpfc_unreg_rpi()
5381 ndlp->nlp_flag &= ~NLP_LOGO_ACC; in lpfc_unreg_rpi()
5384 ndlp->nlp_flag &= ~NLP_LOGO_ACC; in lpfc_unreg_rpi()
5399 struct lpfc_nodelist *ndlp; in lpfc_unreg_hba_rpis() local
5412 list_for_each_entry(ndlp, &vports[i]->fc_nodes, nlp_listp) { in lpfc_unreg_hba_rpis()
5413 if (ndlp->nlp_flag & NLP_RPI_REGISTERED) { in lpfc_unreg_hba_rpis()
5416 lpfc_unreg_rpi(vports[i], ndlp); in lpfc_unreg_hba_rpis()
5491 lpfc_cleanup_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) in lpfc_cleanup_node() argument
5500 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_cleanup_node()
5501 ndlp->nlp_state, ndlp->nlp_rpi); in lpfc_cleanup_node()
5502 lpfc_dequeue_node(vport, ndlp); in lpfc_cleanup_node()
5510 (ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) { in lpfc_cleanup_node()
5521 (ndlp != (struct lpfc_nodelist *)mb->ctx_ndlp)) in lpfc_cleanup_node()
5531 (ndlp == (struct lpfc_nodelist *)mb->ctx_ndlp)) { in lpfc_cleanup_node()
5542 lpfc_els_abort(phba, ndlp); in lpfc_cleanup_node()
5544 spin_lock_irq(&ndlp->lock); in lpfc_cleanup_node()
5545 ndlp->nlp_flag &= ~NLP_DELAY_TMO; in lpfc_cleanup_node()
5546 spin_unlock_irq(&ndlp->lock); in lpfc_cleanup_node()
5548 ndlp->nlp_last_elscmd = 0; in lpfc_cleanup_node()
5549 del_timer_sync(&ndlp->nlp_delayfunc); in lpfc_cleanup_node()
5551 list_del_init(&ndlp->els_retry_evt.evt_listp); in lpfc_cleanup_node()
5552 list_del_init(&ndlp->dev_loss_evt.evt_listp); in lpfc_cleanup_node()
5553 list_del_init(&ndlp->recovery_evt.evt_listp); in lpfc_cleanup_node()
5554 lpfc_cleanup_vports_rrqs(vport, ndlp); in lpfc_cleanup_node()
5557 ndlp->nlp_flag |= NLP_RELEASE_RPI; in lpfc_cleanup_node()
5563 lpfc_matchdid(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, in lpfc_matchdid() argument
5572 if (ndlp->nlp_DID == did) in lpfc_matchdid()
5582 ndlpdid.un.word = ndlp->nlp_DID; in lpfc_matchdid()
5604 matchdid.un.word = ndlp->nlp_DID; in lpfc_matchdid()
5621 struct lpfc_nodelist *ndlp; in __lpfc_findnode_did() local
5624 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) { in __lpfc_findnode_did()
5625 if (lpfc_matchdid(vport, ndlp, did)) { in __lpfc_findnode_did()
5626 data1 = (((uint32_t)ndlp->nlp_state << 24) | in __lpfc_findnode_did()
5627 ((uint32_t)ndlp->nlp_xri << 16) | in __lpfc_findnode_did()
5628 ((uint32_t)ndlp->nlp_type << 8) in __lpfc_findnode_did()
5633 ndlp, ndlp->nlp_DID, in __lpfc_findnode_did()
5634 ndlp->nlp_flag, data1, ndlp->nlp_rpi, in __lpfc_findnode_did()
5635 ndlp->active_rrqs_xri_bitmap); in __lpfc_findnode_did()
5636 return ndlp; in __lpfc_findnode_did()
5650 struct lpfc_nodelist *ndlp; in lpfc_findnode_did() local
5654 ndlp = __lpfc_findnode_did(vport, did); in lpfc_findnode_did()
5656 return ndlp; in lpfc_findnode_did()
5663 struct lpfc_nodelist *ndlp; in lpfc_findnode_mapped() local
5669 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) { in lpfc_findnode_mapped()
5670 if (ndlp->nlp_state == NLP_STE_UNMAPPED_NODE || in lpfc_findnode_mapped()
5671 ndlp->nlp_state == NLP_STE_MAPPED_NODE) { in lpfc_findnode_mapped()
5672 data1 = (((uint32_t)ndlp->nlp_state << 24) | in lpfc_findnode_mapped()
5673 ((uint32_t)ndlp->nlp_xri << 16) | in lpfc_findnode_mapped()
5674 ((uint32_t)ndlp->nlp_type << 8) | in lpfc_findnode_mapped()
5675 ((uint32_t)ndlp->nlp_rpi & 0xff)); in lpfc_findnode_mapped()
5680 ndlp, ndlp->nlp_DID, in lpfc_findnode_mapped()
5681 ndlp->nlp_flag, data1, in lpfc_findnode_mapped()
5682 ndlp->active_rrqs_xri_bitmap); in lpfc_findnode_mapped()
5683 return ndlp; in lpfc_findnode_mapped()
5697 struct lpfc_nodelist *ndlp; in lpfc_setup_disc_node() local
5699 ndlp = lpfc_findnode_did(vport, did); in lpfc_setup_disc_node()
5700 if (!ndlp) { in lpfc_setup_disc_node()
5706 ndlp = lpfc_nlp_init(vport, did); in lpfc_setup_disc_node()
5707 if (!ndlp) in lpfc_setup_disc_node()
5709 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_setup_disc_node()
5714 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_setup_disc_node()
5715 ndlp->nlp_state, vport->fc_flag); in lpfc_setup_disc_node()
5717 spin_lock_irq(&ndlp->lock); in lpfc_setup_disc_node()
5718 ndlp->nlp_flag |= NLP_NPR_2B_DISC; in lpfc_setup_disc_node()
5719 spin_unlock_irq(&ndlp->lock); in lpfc_setup_disc_node()
5720 return ndlp; in lpfc_setup_disc_node()
5734 lpfc_cancel_retry_delay_tmo(vport, ndlp); in lpfc_setup_disc_node()
5739 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_setup_disc_node()
5740 ndlp->nlp_state, vport->fc_flag); in lpfc_setup_disc_node()
5748 return ndlp; in lpfc_setup_disc_node()
5753 if (ndlp->nlp_flag & NLP_RCV_PLOGI && in lpfc_setup_disc_node()
5754 !(ndlp->nlp_type & in lpfc_setup_disc_node()
5758 ndlp->nlp_prev_state = ndlp->nlp_state; in lpfc_setup_disc_node()
5759 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_setup_disc_node()
5761 spin_lock_irq(&ndlp->lock); in lpfc_setup_disc_node()
5762 ndlp->nlp_flag |= NLP_NPR_2B_DISC; in lpfc_setup_disc_node()
5763 spin_unlock_irq(&ndlp->lock); in lpfc_setup_disc_node()
5768 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_setup_disc_node()
5769 ndlp->nlp_state, vport->fc_flag); in lpfc_setup_disc_node()
5770 ndlp = NULL; in lpfc_setup_disc_node()
5776 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_setup_disc_node()
5777 ndlp->nlp_state, vport->fc_flag); in lpfc_setup_disc_node()
5783 if (ndlp->nlp_state == NLP_STE_ADISC_ISSUE || in lpfc_setup_disc_node()
5784 ndlp->nlp_state == NLP_STE_PLOGI_ISSUE || in lpfc_setup_disc_node()
5786 ndlp->nlp_flag & NLP_RCV_PLOGI)) in lpfc_setup_disc_node()
5790 return ndlp; in lpfc_setup_disc_node()
5795 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_setup_disc_node()
5797 spin_lock_irq(&ndlp->lock); in lpfc_setup_disc_node()
5798 ndlp->nlp_flag |= NLP_NPR_2B_DISC; in lpfc_setup_disc_node()
5799 spin_unlock_irq(&ndlp->lock); in lpfc_setup_disc_node()
5801 return ndlp; in lpfc_setup_disc_node()
6002 lpfc_free_tx(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp) in lpfc_free_tx() argument
6018 if (iocb->ndlp != ndlp) in lpfc_free_tx()
6032 if (iocb->ndlp != ndlp) in lpfc_free_tx()
6055 struct lpfc_nodelist *ndlp, *next_ndlp; in lpfc_disc_flush_list() local
6059 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, in lpfc_disc_flush_list()
6061 if (ndlp->nlp_state == NLP_STE_PLOGI_ISSUE || in lpfc_disc_flush_list()
6062 ndlp->nlp_state == NLP_STE_ADISC_ISSUE) { in lpfc_disc_flush_list()
6063 lpfc_free_tx(phba, ndlp); in lpfc_disc_flush_list()
6082 struct lpfc_nodelist *ndlp, *next_ndlp; in lpfc_notify_xport_npr() local
6084 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, in lpfc_notify_xport_npr()
6086 lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); in lpfc_notify_xport_npr()
6142 struct lpfc_nodelist *ndlp, *next_ndlp; in lpfc_disc_timeout_handler() local
6168 list_for_each_entry_safe(ndlp, next_ndlp, &vport->fc_nodes, in lpfc_disc_timeout_handler()
6170 if (ndlp->nlp_state != NLP_STE_NPR_NODE) in lpfc_disc_timeout_handler()
6172 if (ndlp->nlp_type & NLP_FABRIC) { in lpfc_disc_timeout_handler()
6174 lpfc_drop_node(vport, ndlp); in lpfc_disc_timeout_handler()
6176 } else if (!(ndlp->nlp_flag & NLP_NPR_ADISC)) { in lpfc_disc_timeout_handler()
6180 lpfc_unreg_rpi(vport, ndlp); in lpfc_disc_timeout_handler()
6220 ndlp = lpfc_findnode_did(vport, NameServer_DID); in lpfc_disc_timeout_handler()
6221 if (ndlp) in lpfc_disc_timeout_handler()
6222 lpfc_els_abort(phba, ndlp); in lpfc_disc_timeout_handler()
6382 struct lpfc_nodelist *ndlp = (struct lpfc_nodelist *)pmb->ctx_ndlp; in lpfc_mbx_cmpl_fdmi_reg_login() local
6388 ndlp->nlp_rpi = mb->un.varWords[0]; in lpfc_mbx_cmpl_fdmi_reg_login()
6389 ndlp->nlp_flag |= NLP_RPI_REGISTERED; in lpfc_mbx_cmpl_fdmi_reg_login()
6390 ndlp->nlp_type |= NLP_FABRIC; in lpfc_mbx_cmpl_fdmi_reg_login()
6391 lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE); in lpfc_mbx_cmpl_fdmi_reg_login()
6394 ndlp->nlp_rpi, ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_mbx_cmpl_fdmi_reg_login()
6395 kref_read(&ndlp->kref), in lpfc_mbx_cmpl_fdmi_reg_login()
6396 ndlp); in lpfc_mbx_cmpl_fdmi_reg_login()
6405 lpfc_fdmi_cmd(vport, ndlp, SLI_MGMT_DHBA, 0); in lpfc_mbx_cmpl_fdmi_reg_login()
6407 lpfc_fdmi_cmd(vport, ndlp, SLI_MGMT_DPRT, 0); in lpfc_mbx_cmpl_fdmi_reg_login()
6414 lpfc_nlp_put(ndlp); in lpfc_mbx_cmpl_fdmi_reg_login()
6420 lpfc_filter_by_rpi(struct lpfc_nodelist *ndlp, void *param) in lpfc_filter_by_rpi() argument
6424 return ndlp->nlp_rpi == *rpi; in lpfc_filter_by_rpi()
6428 lpfc_filter_by_wwpn(struct lpfc_nodelist *ndlp, void *param) in lpfc_filter_by_wwpn() argument
6430 return memcmp(&ndlp->nlp_portname, param, in lpfc_filter_by_wwpn()
6431 sizeof(ndlp->nlp_portname)) == 0; in lpfc_filter_by_wwpn()
6437 struct lpfc_nodelist *ndlp; in __lpfc_find_node() local
6439 list_for_each_entry(ndlp, &vport->fc_nodes, nlp_listp) { in __lpfc_find_node()
6440 if (filter(ndlp, param)) { in __lpfc_find_node()
6445 filter, ndlp, ndlp->nlp_DID, in __lpfc_find_node()
6446 ndlp->nlp_flag, ndlp->nlp_state, in __lpfc_find_node()
6447 ndlp->nlp_xri, ndlp->nlp_type, in __lpfc_find_node()
6448 ndlp->nlp_rpi); in __lpfc_find_node()
6449 return ndlp; in __lpfc_find_node()
6475 struct lpfc_nodelist *ndlp; in lpfc_findnode_wwpn() local
6478 ndlp = __lpfc_find_node(vport, lpfc_filter_by_wwpn, wwpn); in lpfc_findnode_wwpn()
6480 return ndlp; in lpfc_findnode_wwpn()
6492 struct lpfc_nodelist *ndlp; in lpfc_findnode_rpi() local
6496 ndlp = __lpfc_findnode_rpi(vport, rpi); in lpfc_findnode_rpi()
6498 return ndlp; in lpfc_findnode_rpi()
6554 struct lpfc_nodelist *ndlp; in lpfc_nlp_init() local
6563 ndlp = mempool_alloc(vport->phba->nlp_mem_pool, GFP_KERNEL); in lpfc_nlp_init()
6564 if (!ndlp) { in lpfc_nlp_init()
6570 memset(ndlp, 0, sizeof (struct lpfc_nodelist)); in lpfc_nlp_init()
6572 spin_lock_init(&ndlp->lock); in lpfc_nlp_init()
6574 lpfc_initialize_node(vport, ndlp, did); in lpfc_nlp_init()
6575 INIT_LIST_HEAD(&ndlp->nlp_listp); in lpfc_nlp_init()
6577 ndlp->nlp_rpi = rpi; in lpfc_nlp_init()
6581 ndlp, ndlp->nlp_rpi, ndlp->nlp_DID, in lpfc_nlp_init()
6582 ndlp->nlp_flag, kref_read(&ndlp->kref)); in lpfc_nlp_init()
6584 ndlp->active_rrqs_xri_bitmap = in lpfc_nlp_init()
6587 if (ndlp->active_rrqs_xri_bitmap) in lpfc_nlp_init()
6588 memset(ndlp->active_rrqs_xri_bitmap, 0, in lpfc_nlp_init()
6589 ndlp->phba->cfg_rrq_xri_bitmap_sz); in lpfc_nlp_init()
6596 ndlp->nlp_DID, 0, 0); in lpfc_nlp_init()
6598 return ndlp; in lpfc_nlp_init()
6607 struct lpfc_nodelist *ndlp = container_of(kref, struct lpfc_nodelist, in lpfc_nlp_release() local
6609 struct lpfc_vport *vport = ndlp->vport; in lpfc_nlp_release()
6611 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE, in lpfc_nlp_release()
6613 ndlp->nlp_DID, ndlp->nlp_flag, ndlp->nlp_type); in lpfc_nlp_release()
6617 __func__, ndlp, ndlp->nlp_DID, in lpfc_nlp_release()
6618 kref_read(&ndlp->kref), ndlp->nlp_rpi); in lpfc_nlp_release()
6621 lpfc_cancel_retry_delay_tmo(vport, ndlp); in lpfc_nlp_release()
6622 lpfc_cleanup_node(vport, ndlp); in lpfc_nlp_release()
6631 if (ndlp->nlp_flag & NLP_RELEASE_RPI) { in lpfc_nlp_release()
6632 if (ndlp->nlp_rpi != LPFC_RPI_ALLOC_ERROR && in lpfc_nlp_release()
6633 !(ndlp->nlp_flag & (NLP_RPI_REGISTERED | NLP_UNREG_INP))) { in lpfc_nlp_release()
6634 lpfc_sli4_free_rpi(vport->phba, ndlp->nlp_rpi); in lpfc_nlp_release()
6635 ndlp->nlp_rpi = LPFC_RPI_ALLOC_ERROR; in lpfc_nlp_release()
6642 ndlp->vport = NULL; in lpfc_nlp_release()
6643 ndlp->nlp_state = NLP_STE_FREED_NODE; in lpfc_nlp_release()
6644 ndlp->nlp_flag = 0; in lpfc_nlp_release()
6645 ndlp->fc4_xpt_flags = 0; in lpfc_nlp_release()
6648 if (ndlp->phba->sli_rev == LPFC_SLI_REV4) in lpfc_nlp_release()
6649 mempool_free(ndlp->active_rrqs_xri_bitmap, in lpfc_nlp_release()
6650 ndlp->phba->active_rrq_pool); in lpfc_nlp_release()
6651 mempool_free(ndlp, ndlp->phba->nlp_mem_pool); in lpfc_nlp_release()
6659 lpfc_nlp_get(struct lpfc_nodelist *ndlp) in lpfc_nlp_get() argument
6663 if (ndlp) { in lpfc_nlp_get()
6664 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE, in lpfc_nlp_get()
6666 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_nlp_get()
6667 kref_read(&ndlp->kref)); in lpfc_nlp_get()
6673 spin_lock_irqsave(&ndlp->lock, flags); in lpfc_nlp_get()
6674 if (!kref_get_unless_zero(&ndlp->kref)) { in lpfc_nlp_get()
6675 spin_unlock_irqrestore(&ndlp->lock, flags); in lpfc_nlp_get()
6676 lpfc_printf_vlog(ndlp->vport, KERN_WARNING, LOG_NODE, in lpfc_nlp_get()
6678 __func__, (void *)ndlp, kref_read(&ndlp->kref)); in lpfc_nlp_get()
6681 spin_unlock_irqrestore(&ndlp->lock, flags); in lpfc_nlp_get()
6683 WARN_ONCE(!ndlp, "**** %s, get ref on NULL ndlp!", __func__); in lpfc_nlp_get()
6686 return ndlp; in lpfc_nlp_get()
6693 lpfc_nlp_put(struct lpfc_nodelist *ndlp) in lpfc_nlp_put() argument
6695 if (ndlp) { in lpfc_nlp_put()
6696 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE, in lpfc_nlp_put()
6698 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_nlp_put()
6699 kref_read(&ndlp->kref)); in lpfc_nlp_put()
6701 WARN_ONCE(!ndlp, "**** %s, put ref on NULL ndlp!", __func__); in lpfc_nlp_put()
6704 return ndlp ? kref_put(&ndlp->kref, lpfc_nlp_release) : 0; in lpfc_nlp_put()
6713 lpfc_nlp_not_used(struct lpfc_nodelist *ndlp) in lpfc_nlp_not_used() argument
6715 lpfc_debugfs_disc_trc(ndlp->vport, LPFC_DISC_TRC_NODE, in lpfc_nlp_not_used()
6717 ndlp->nlp_DID, ndlp->nlp_flag, in lpfc_nlp_not_used()
6718 kref_read(&ndlp->kref)); in lpfc_nlp_not_used()
6720 if (kref_read(&ndlp->kref) == 1) in lpfc_nlp_not_used()
6721 if (lpfc_nlp_put(ndlp)) in lpfc_nlp_not_used()
6741 struct lpfc_nodelist *ndlp; in lpfc_fcf_inuse() local
6764 list_for_each_entry(ndlp, &vports[i]->fc_nodes, nlp_listp) { in lpfc_fcf_inuse()
6765 if (ndlp->rport && in lpfc_fcf_inuse()
6766 (ndlp->rport->roles & FC_RPORT_ROLE_FCP_TARGET)) { in lpfc_fcf_inuse()
6770 } else if (ndlp->nlp_flag & NLP_RPI_REGISTERED) { in lpfc_fcf_inuse()
6776 ndlp->nlp_rpi, ndlp->nlp_DID, in lpfc_fcf_inuse()
6777 ndlp->nlp_flag); in lpfc_fcf_inuse()
6847 struct lpfc_nodelist *ndlp; in lpfc_unregister_fcf_prep() local
6863 ndlp = lpfc_findnode_did(vports[i], Fabric_DID); in lpfc_unregister_fcf_prep()
6864 if (ndlp) in lpfc_unregister_fcf_prep()
6865 lpfc_cancel_retry_delay_tmo(vports[i], ndlp); in lpfc_unregister_fcf_prep()
6878 ndlp = lpfc_findnode_did(phba->pport, Fabric_DID); in lpfc_unregister_fcf_prep()
6879 if (ndlp) in lpfc_unregister_fcf_prep()
6880 lpfc_cancel_retry_delay_tmo(phba->pport, ndlp); in lpfc_unregister_fcf_prep()