/*******************************************************************
* This file is part of the Emulex Linux Device Driver for *
* Fibre Channel Host Bus Adapters. *
- * Copyright (C) 2017-2025 Broadcom. All Rights Reserved. The term *
+ * Copyright (C) 2017-2026 Broadcom. All Rights Reserved. The term *
* “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. *
* Copyright (C) 2004-2016 Emulex. All rights reserved. *
* EMULEX and SLI are trademarks of Emulex. *
elsiocb = lpfc_prep_els_iocb(vport, 1, cmdsize, retry, ndlp,
ndlp->nlp_DID, ELS_CMD_FLOGI);
- if (!elsiocb)
+ if (!elsiocb) {
+ lpfc_vport_set_state(vport, FC_VPORT_FAILED);
+ lpfc_printf_vlog(vport, KERN_WARNING, LOG_ELS | LOG_DISCOVERY,
+ "4296 Unable to prepare FLOGI iocb\n");
return 1;
+ }
wqe = &elsiocb->wqe;
pcmd = (uint8_t *)elsiocb->cmd_dmabuf->virt;
phba->sli3_options, 0, 0);
elsiocb->ndlp = lpfc_nlp_get(ndlp);
- if (!elsiocb->ndlp) {
- lpfc_els_free_iocb(phba, elsiocb);
- return 1;
- }
+ if (!elsiocb->ndlp)
+ goto err_out;
/* Avoid race with FLOGI completion and hba_flags. */
set_bit(HBA_FLOGI_ISSUED, &phba->hba_flag);
if (rc == IOCB_ERROR) {
clear_bit(HBA_FLOGI_ISSUED, &phba->hba_flag);
clear_bit(HBA_FLOGI_OUTSTANDING, &phba->hba_flag);
- lpfc_els_free_iocb(phba, elsiocb);
lpfc_nlp_put(ndlp);
- return 1;
+ goto err_out;
}
/* Clear external loopback plug detected flag */
}
return 0;
+
+ err_out:
+ lpfc_els_free_iocb(phba, elsiocb);
+ lpfc_vport_set_state(vport, FC_VPORT_FAILED);
+ lpfc_printf_vlog(vport, KERN_WARNING, LOG_ELS | LOG_DISCOVERY,
+ "4297 Issue FLOGI: Cannot send IOCB\n");
+ return 1;
}
/**
return;
}
- lpfc_initial_flogi(vport);
+ if (!lpfc_initial_flogi(vport)) {
+ lpfc_printf_vlog(vport, KERN_ERR, LOG_MBOX | LOG_ELS,
+ "2345 Can't issue initial FLOGI\n");
+ lpfc_vport_set_state(vport, FC_VPORT_FAILED);
+ }
mempool_free(mboxq, phba->mbox_mem_pool);
return;
}
return;
}
- if (phba->link_flag & LS_NPIV_FAB_SUPPORTED)
- lpfc_initial_fdisc(vport);
+ if (phba->link_flag & LS_NPIV_FAB_SUPPORTED) {
+ if (!lpfc_initial_fdisc(vport)) {
+ lpfc_printf_vlog(vport, KERN_WARNING,
+ LOG_MBOX | LOG_ELS,
+ "2346 Can't issue initial FDISC\n");
+ lpfc_vport_set_state(vport, FC_VPORT_FAILED);
+ }
+ }
else {
lpfc_vport_set_state(vport, FC_VPORT_NO_FABRIC_SUPP);
lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,