Commit 25594c6b authored by Jamie Wellnitz's avatar Jamie Wellnitz Committed by James Bottomley

[SCSI] lpfc 8.1.2: Code cleanup of lpfc_mbx_cmpl_config_link

Code cleanup of lpfc_mbx_cmpl_config_link
Signed-off-by: default avatarJamie Wellnitz <Jamie.Wellnitz@emulex.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 367c2713
......@@ -538,80 +538,59 @@ lpfc_mbx_cmpl_clear_la(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb)
}
static void
lpfc_mbx_cmpl_config_link(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmb)
lpfc_mbx_cmpl_local_config_link(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
{
struct lpfc_sli *psli;
MAILBOX_t *mb;
psli = &phba->sli;
mb = &pmb->mb;
/* Check for error */
if (mb->mbxStatus) {
/* CONFIG_LINK mbox error <mbxStatus> state <hba_state> */
lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
"%d:0306 CONFIG_LINK mbxStatus error x%x "
"HBA state x%x\n",
phba->brd_no, mb->mbxStatus, phba->hba_state);
struct lpfc_sli *psli = &phba->sli;
int rc;
lpfc_linkdown(phba);
phba->hba_state = LPFC_HBA_ERROR;
if (pmb->mb.mbxStatus)
goto out;
}
if (phba->hba_state == LPFC_LOCAL_CFG_LINK) {
if (phba->fc_topology == TOPOLOGY_LOOP) {
/* If we are public loop and L bit was set */
if ((phba->fc_flag & FC_PUBLIC_LOOP) &&
!(phba->fc_flag & FC_LBIT)) {
/* Need to wait for FAN - use discovery timer
* for timeout. hba_state is identically
* LPFC_LOCAL_CFG_LINK while waiting for FAN
*/
lpfc_set_disctmo(phba);
mempool_free( pmb, phba->mbox_mem_pool);
return;
}
mempool_free(pmb, phba->mbox_mem_pool);
if (phba->fc_topology == TOPOLOGY_LOOP &&
phba->fc_flag & FC_PUBLIC_LOOP &&
!(phba->fc_flag & FC_LBIT)) {
/* Need to wait for FAN - use discovery timer
* for timeout. hba_state is identically
* LPFC_LOCAL_CFG_LINK while waiting for FAN
*/
lpfc_set_disctmo(phba);
return;
}
/* Start discovery by sending a FLOGI hba_state is identically
* LPFC_FLOGI while waiting for FLOGI cmpl
*/
phba->hba_state = LPFC_FLOGI;
lpfc_set_disctmo(phba);
lpfc_initial_flogi(phba);
mempool_free( pmb, phba->mbox_mem_pool);
return;
}
if (phba->hba_state == LPFC_FABRIC_CFG_LINK) {
mempool_free( pmb, phba->mbox_mem_pool);
return;
}
/* Start discovery by sending a FLOGI. hba_state is identically
* LPFC_FLOGI while waiting for FLOGI cmpl
*/
phba->hba_state = LPFC_FLOGI;
lpfc_set_disctmo(phba);
lpfc_initial_flogi(phba);
return;
out:
/* CONFIG_LINK bad hba state <hba_state> */
lpfc_printf_log(phba,
KERN_ERR,
LOG_DISCOVERY,
lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
"%d:0306 CONFIG_LINK mbxStatus error x%x "
"HBA state x%x\n",
phba->brd_no, pmb->mb.mbxStatus, phba->hba_state);
lpfc_linkdown(phba);
phba->hba_state = LPFC_HBA_ERROR;
lpfc_printf_log(phba, KERN_ERR, LOG_DISCOVERY,
"%d:0200 CONFIG_LINK bad hba state x%x\n",
phba->brd_no, phba->hba_state);
if (phba->hba_state != LPFC_CLEAR_LA) {
lpfc_clear_la(phba, pmb);
pmb->mbox_cmpl = lpfc_mbx_cmpl_clear_la;
if (lpfc_sli_issue_mbox(phba, pmb, (MBX_NOWAIT | MBX_STOP_IOCB))
== MBX_NOT_FINISHED) {
mempool_free( pmb, phba->mbox_mem_pool);
lpfc_disc_flush_list(phba);
psli->ring[(psli->ip_ring)].flag &=
~LPFC_STOP_IOCB_EVENT;
psli->ring[(psli->fcp_ring)].flag &=
~LPFC_STOP_IOCB_EVENT;
psli->ring[(psli->next_ring)].flag &=
~LPFC_STOP_IOCB_EVENT;
phba->hba_state = LPFC_HBA_READY;
}
} else {
mempool_free( pmb, phba->mbox_mem_pool);
lpfc_clear_la(phba, pmb);
pmb->mbox_cmpl = lpfc_mbx_cmpl_clear_la;
rc = lpfc_sli_issue_mbox(phba, pmb, (MBX_NOWAIT | MBX_STOP_IOCB));
if (rc == MBX_NOT_FINISHED) {
mempool_free(pmb, phba->mbox_mem_pool);
lpfc_disc_flush_list(phba);
psli->ring[(psli->ip_ring)].flag &= ~LPFC_STOP_IOCB_EVENT;
psli->ring[(psli->fcp_ring)].flag &= ~LPFC_STOP_IOCB_EVENT;
psli->ring[(psli->next_ring)].flag &= ~LPFC_STOP_IOCB_EVENT;
phba->hba_state = LPFC_HBA_READY;
}
return;
}
......@@ -765,7 +744,7 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, READ_LA_VAR *la)
if (cfglink_mbox) {
phba->hba_state = LPFC_LOCAL_CFG_LINK;
lpfc_config_link(phba, cfglink_mbox);
cfglink_mbox->mbox_cmpl = lpfc_mbx_cmpl_config_link;
cfglink_mbox->mbox_cmpl = lpfc_mbx_cmpl_local_config_link;
lpfc_sli_issue_mbox(phba, cfglink_mbox,
(MBX_NOWAIT | MBX_STOP_IOCB));
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment