[SCSI] lpfc 8.3.3 : FC/FCOE discovery fixes

Contains the following changes:
- Force vport to send LOGO to fabric controller when deleting vport
- Fixed driver failing to register login when a PLOGI is received
- Fixes for FIP discovery
- Added stricter checks for FCF addressing mode
- Added code to send only FLOGI, FDISC and LOGO to Fabric controller as FIP
- Fixed handling of LOGO from Fabric port
- Fixed consecutive link up events skipped link_down processing

Signed-off-by: James Smart <James.Smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Цей коміт міститься в:
James Smart
2009-06-10 17:22:56 -04:00
зафіксовано James Bottomley
джерело f112668880
коміт 0c2875893e
8 змінених файлів з 59 додано та 26 видалено

Переглянути файл

@@ -4491,8 +4491,10 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)
rc = -ENODEV;
goto out_free_vpd;
}
/* Temporary initialization of lpfc_fip_flag to non-fip */
bf_set(lpfc_fip_flag, &phba->sli4_hba.sli4_flags, 0);
if (phba->cfg_enable_fip)
bf_set(lpfc_fip_flag, &phba->sli4_hba.sli4_flags, 1);
else
bf_set(lpfc_fip_flag, &phba->sli4_hba.sli4_flags, 0);
/* Set up all the queues to the device */
rc = lpfc_sli4_queue_setup(phba);
@@ -5856,18 +5858,13 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
fip = bf_get(lpfc_fip_flag, &phba->sli4_hba.sli4_flags);
/* The fcp commands will set command type */
if ((!(iocbq->iocb_flag & LPFC_IO_FCP)) && (!fip))
command_type = ELS_COMMAND_NON_FIP;
else if (!(iocbq->iocb_flag & LPFC_IO_FCP))
command_type = ELS_COMMAND_FIP;
else if (iocbq->iocb_flag & LPFC_IO_FCP)
if (iocbq->iocb_flag & LPFC_IO_FCP)
command_type = FCP_COMMAND;
else {
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
"2019 Invalid cmd 0x%x\n",
iocbq->iocb.ulpCommand);
return IOCB_ERROR;
}
else if (fip && (iocbq->iocb_flag & LPFC_FIP_ELS))
command_type = ELS_COMMAND_FIP;
else
command_type = ELS_COMMAND_NON_FIP;
/* Some of the fields are in the right position already */
memcpy(wqe, &iocbq->iocb, sizeof(union lpfc_wqe));
abort_tag = (uint32_t) iocbq->iotag;
@@ -11467,6 +11464,7 @@ lpfc_sli4_build_dflt_fcf_record(struct lpfc_hba *phba,
bf_set(lpfc_fcf_record_fc_map_1, fcf_record, phba->fc_map[1]);
bf_set(lpfc_fcf_record_fc_map_2, fcf_record, phba->fc_map[2]);
bf_set(lpfc_fcf_record_fcf_valid, fcf_record, 1);
bf_set(lpfc_fcf_record_fcf_avail, fcf_record, 1);
bf_set(lpfc_fcf_record_fcf_index, fcf_record, fcf_index);
bf_set(lpfc_fcf_record_mac_addr_prov, fcf_record,
LPFC_FCF_FPMA | LPFC_FCF_SPMA);