diff options
author | James Smart <James.Smart@Emulex.Com> | 2009-06-10 17:22:56 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-06-15 11:09:33 -0400 |
commit | 0c2875893ef27b93d5d3221f8f98ae944d6be5fa (patch) | |
tree | 01e201e3827611c9b5cfc35a5f00b6532fc948ef /drivers/scsi/lpfc/lpfc_sli.c | |
parent | f1126688805d77a4798b694439fa48bba6629388 (diff) |
[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>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_sli.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_sli.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c index b8cf0a1b1382..ba698d5f31af 100644 --- a/drivers/scsi/lpfc/lpfc_sli.c +++ b/drivers/scsi/lpfc/lpfc_sli.c | |||
@@ -4491,8 +4491,10 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba) | |||
4491 | rc = -ENODEV; | 4491 | rc = -ENODEV; |
4492 | goto out_free_vpd; | 4492 | goto out_free_vpd; |
4493 | } | 4493 | } |
4494 | /* Temporary initialization of lpfc_fip_flag to non-fip */ | 4494 | if (phba->cfg_enable_fip) |
4495 | bf_set(lpfc_fip_flag, &phba->sli4_hba.sli4_flags, 0); | 4495 | bf_set(lpfc_fip_flag, &phba->sli4_hba.sli4_flags, 1); |
4496 | else | ||
4497 | bf_set(lpfc_fip_flag, &phba->sli4_hba.sli4_flags, 0); | ||
4496 | 4498 | ||
4497 | /* Set up all the queues to the device */ | 4499 | /* Set up all the queues to the device */ |
4498 | rc = lpfc_sli4_queue_setup(phba); | 4500 | rc = lpfc_sli4_queue_setup(phba); |
@@ -5856,18 +5858,13 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq, | |||
5856 | 5858 | ||
5857 | fip = bf_get(lpfc_fip_flag, &phba->sli4_hba.sli4_flags); | 5859 | fip = bf_get(lpfc_fip_flag, &phba->sli4_hba.sli4_flags); |
5858 | /* The fcp commands will set command type */ | 5860 | /* The fcp commands will set command type */ |
5859 | if ((!(iocbq->iocb_flag & LPFC_IO_FCP)) && (!fip)) | 5861 | if (iocbq->iocb_flag & LPFC_IO_FCP) |
5860 | command_type = ELS_COMMAND_NON_FIP; | ||
5861 | else if (!(iocbq->iocb_flag & LPFC_IO_FCP)) | ||
5862 | command_type = ELS_COMMAND_FIP; | ||
5863 | else if (iocbq->iocb_flag & LPFC_IO_FCP) | ||
5864 | command_type = FCP_COMMAND; | 5862 | command_type = FCP_COMMAND; |
5865 | else { | 5863 | else if (fip && (iocbq->iocb_flag & LPFC_FIP_ELS)) |
5866 | lpfc_printf_log(phba, KERN_ERR, LOG_SLI, | 5864 | command_type = ELS_COMMAND_FIP; |
5867 | "2019 Invalid cmd 0x%x\n", | 5865 | else |
5868 | iocbq->iocb.ulpCommand); | 5866 | command_type = ELS_COMMAND_NON_FIP; |
5869 | return IOCB_ERROR; | 5867 | |
5870 | } | ||
5871 | /* Some of the fields are in the right position already */ | 5868 | /* Some of the fields are in the right position already */ |
5872 | memcpy(wqe, &iocbq->iocb, sizeof(union lpfc_wqe)); | 5869 | memcpy(wqe, &iocbq->iocb, sizeof(union lpfc_wqe)); |
5873 | abort_tag = (uint32_t) iocbq->iotag; | 5870 | abort_tag = (uint32_t) iocbq->iotag; |
@@ -11467,6 +11464,7 @@ lpfc_sli4_build_dflt_fcf_record(struct lpfc_hba *phba, | |||
11467 | bf_set(lpfc_fcf_record_fc_map_1, fcf_record, phba->fc_map[1]); | 11464 | bf_set(lpfc_fcf_record_fc_map_1, fcf_record, phba->fc_map[1]); |
11468 | bf_set(lpfc_fcf_record_fc_map_2, fcf_record, phba->fc_map[2]); | 11465 | bf_set(lpfc_fcf_record_fc_map_2, fcf_record, phba->fc_map[2]); |
11469 | bf_set(lpfc_fcf_record_fcf_valid, fcf_record, 1); | 11466 | bf_set(lpfc_fcf_record_fcf_valid, fcf_record, 1); |
11467 | bf_set(lpfc_fcf_record_fcf_avail, fcf_record, 1); | ||
11470 | bf_set(lpfc_fcf_record_fcf_index, fcf_record, fcf_index); | 11468 | bf_set(lpfc_fcf_record_fcf_index, fcf_record, fcf_index); |
11471 | bf_set(lpfc_fcf_record_mac_addr_prov, fcf_record, | 11469 | bf_set(lpfc_fcf_record_mac_addr_prov, fcf_record, |
11472 | LPFC_FCF_FPMA | LPFC_FCF_SPMA); | 11470 | LPFC_FCF_FPMA | LPFC_FCF_SPMA); |