[SCSI] lpfc 8.1.2: Code cleanup of lpfc_mbx_cmpl_config_link
Code cleanup of lpfc_mbx_cmpl_config_link Signed-off-by: Jamie Wellnitz <Jamie.Wellnitz@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
Родитель
367c27134a
Коммит
25594c6b84
|
@ -538,80 +538,59 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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;
|
struct lpfc_sli *psli = &phba->sli;
|
||||||
MAILBOX_t *mb;
|
int rc;
|
||||||
|
|
||||||
psli = &phba->sli;
|
if (pmb->mb.mbxStatus)
|
||||||
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);
|
|
||||||
|
|
||||||
lpfc_linkdown(phba);
|
|
||||||
phba->hba_state = LPFC_HBA_ERROR;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
|
||||||
|
|
||||||
if (phba->hba_state == LPFC_LOCAL_CFG_LINK) {
|
mempool_free(pmb, phba->mbox_mem_pool);
|
||||||
if (phba->fc_topology == TOPOLOGY_LOOP) {
|
|
||||||
/* If we are public loop and L bit was set */
|
if (phba->fc_topology == TOPOLOGY_LOOP &&
|
||||||
if ((phba->fc_flag & FC_PUBLIC_LOOP) &&
|
phba->fc_flag & FC_PUBLIC_LOOP &&
|
||||||
!(phba->fc_flag & FC_LBIT)) {
|
!(phba->fc_flag & FC_LBIT)) {
|
||||||
/* Need to wait for FAN - use discovery timer
|
/* Need to wait for FAN - use discovery timer
|
||||||
* for timeout. hba_state is identically
|
* for timeout. hba_state is identically
|
||||||
* LPFC_LOCAL_CFG_LINK while waiting for FAN
|
* LPFC_LOCAL_CFG_LINK while waiting for FAN
|
||||||
*/
|
*/
|
||||||
lpfc_set_disctmo(phba);
|
lpfc_set_disctmo(phba);
|
||||||
mempool_free( pmb, phba->mbox_mem_pool);
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Start discovery by sending a FLOGI hba_state is identically
|
/* Start discovery by sending a FLOGI. hba_state is identically
|
||||||
* LPFC_FLOGI while waiting for FLOGI cmpl
|
* LPFC_FLOGI while waiting for FLOGI cmpl
|
||||||
*/
|
*/
|
||||||
phba->hba_state = LPFC_FLOGI;
|
phba->hba_state = LPFC_FLOGI;
|
||||||
lpfc_set_disctmo(phba);
|
lpfc_set_disctmo(phba);
|
||||||
lpfc_initial_flogi(phba);
|
lpfc_initial_flogi(phba);
|
||||||
mempool_free( pmb, phba->mbox_mem_pool);
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (phba->hba_state == LPFC_FABRIC_CFG_LINK) {
|
|
||||||
mempool_free( pmb, phba->mbox_mem_pool);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
out:
|
||||||
/* CONFIG_LINK bad hba state <hba_state> */
|
lpfc_printf_log(phba, KERN_ERR, LOG_MBOX,
|
||||||
lpfc_printf_log(phba,
|
"%d:0306 CONFIG_LINK mbxStatus error x%x "
|
||||||
KERN_ERR,
|
"HBA state x%x\n",
|
||||||
LOG_DISCOVERY,
|
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",
|
"%d:0200 CONFIG_LINK bad hba state x%x\n",
|
||||||
phba->brd_no, phba->hba_state);
|
phba->brd_no, phba->hba_state);
|
||||||
|
|
||||||
if (phba->hba_state != LPFC_CLEAR_LA) {
|
lpfc_clear_la(phba, pmb);
|
||||||
lpfc_clear_la(phba, pmb);
|
pmb->mbox_cmpl = lpfc_mbx_cmpl_clear_la;
|
||||||
pmb->mbox_cmpl = lpfc_mbx_cmpl_clear_la;
|
rc = lpfc_sli_issue_mbox(phba, pmb, (MBX_NOWAIT | MBX_STOP_IOCB));
|
||||||
if (lpfc_sli_issue_mbox(phba, pmb, (MBX_NOWAIT | MBX_STOP_IOCB))
|
if (rc == MBX_NOT_FINISHED) {
|
||||||
== MBX_NOT_FINISHED) {
|
mempool_free(pmb, phba->mbox_mem_pool);
|
||||||
mempool_free( pmb, phba->mbox_mem_pool);
|
lpfc_disc_flush_list(phba);
|
||||||
lpfc_disc_flush_list(phba);
|
psli->ring[(psli->ip_ring)].flag &= ~LPFC_STOP_IOCB_EVENT;
|
||||||
psli->ring[(psli->ip_ring)].flag &=
|
psli->ring[(psli->fcp_ring)].flag &= ~LPFC_STOP_IOCB_EVENT;
|
||||||
~LPFC_STOP_IOCB_EVENT;
|
psli->ring[(psli->next_ring)].flag &= ~LPFC_STOP_IOCB_EVENT;
|
||||||
psli->ring[(psli->fcp_ring)].flag &=
|
phba->hba_state = LPFC_HBA_READY;
|
||||||
~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);
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -765,7 +744,7 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, READ_LA_VAR *la)
|
||||||
if (cfglink_mbox) {
|
if (cfglink_mbox) {
|
||||||
phba->hba_state = LPFC_LOCAL_CFG_LINK;
|
phba->hba_state = LPFC_LOCAL_CFG_LINK;
|
||||||
lpfc_config_link(phba, cfglink_mbox);
|
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,
|
lpfc_sli_issue_mbox(phba, cfglink_mbox,
|
||||||
(MBX_NOWAIT | MBX_STOP_IOCB));
|
(MBX_NOWAIT | MBX_STOP_IOCB));
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче