diff options
author | James Smart <james.smart@emulex.com> | 2010-07-14 15:31:37 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-07-28 10:05:41 -0400 |
commit | 3804dc84b8c11038ef75d97fd11e43658f623665 (patch) | |
tree | 03f6a03b3a489efb11ed40548a5b79b7da34034b /drivers/scsi/lpfc/lpfc_init.c | |
parent | 589a52d6a97e01c5ff6c244ee6c8ea57726c610f (diff) |
[SCSI] lpfc 8.3.15: FCoE Related Fixes
FCoE Related Fixes
- Correct find-next-FCF routine so that it searches at next FCF rather
than current one.
- Enhanced round-robin FCF failover algorithm to re-start on "New FCF"
async event
- Update the manner in which we look at FCFs while they may be in
their discovery state.
- Use LPFC_FCOE_NULL_VID macro when checkinf for valid vlan_id for FCF
Signed-off-by: Alex Iannicelli <alex.iannicelli@emulex.com>
Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_init.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index fb06933f8e6c..2786ee3b605d 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -3357,22 +3357,14 @@ lpfc_sli4_async_fcoe_evt(struct lpfc_hba *phba, | |||
3357 | "evt_tag:x%x, fcf_index:x%x\n", | 3357 | "evt_tag:x%x, fcf_index:x%x\n", |
3358 | acqe_fcoe->event_tag, | 3358 | acqe_fcoe->event_tag, |
3359 | acqe_fcoe->index); | 3359 | acqe_fcoe->index); |
3360 | /* If the FCF discovery is in progress, do nothing. */ | ||
3360 | spin_lock_irq(&phba->hbalock); | 3361 | spin_lock_irq(&phba->hbalock); |
3361 | if ((phba->fcf.fcf_flag & FCF_SCAN_DONE) || | 3362 | if (phba->hba_flag & FCF_DISC_INPROGRESS) { |
3362 | (phba->hba_flag & FCF_DISC_INPROGRESS)) { | ||
3363 | /* | ||
3364 | * If the current FCF is in discovered state or | ||
3365 | * FCF discovery is in progress, do nothing. | ||
3366 | */ | ||
3367 | spin_unlock_irq(&phba->hbalock); | 3363 | spin_unlock_irq(&phba->hbalock); |
3368 | break; | 3364 | break; |
3369 | } | 3365 | } |
3370 | 3366 | /* If fast FCF failover rescan event is pending, do nothing */ | |
3371 | if (phba->fcf.fcf_flag & FCF_REDISC_EVT) { | 3367 | if (phba->fcf.fcf_flag & FCF_REDISC_EVT) { |
3372 | /* | ||
3373 | * If fast FCF failover rescan event is pending, | ||
3374 | * do nothing. | ||
3375 | */ | ||
3376 | spin_unlock_irq(&phba->hbalock); | 3368 | spin_unlock_irq(&phba->hbalock); |
3377 | break; | 3369 | break; |
3378 | } | 3370 | } |
@@ -3393,7 +3385,13 @@ lpfc_sli4_async_fcoe_evt(struct lpfc_hba *phba, | |||
3393 | acqe_fcoe->index); | 3385 | acqe_fcoe->index); |
3394 | rc = lpfc_sli4_read_fcf_rec(phba, acqe_fcoe->index); | 3386 | rc = lpfc_sli4_read_fcf_rec(phba, acqe_fcoe->index); |
3395 | } | 3387 | } |
3396 | 3388 | /* If the FCF has been in discovered state, do nothing. */ | |
3389 | spin_lock_irq(&phba->hbalock); | ||
3390 | if (phba->fcf.fcf_flag & FCF_SCAN_DONE) { | ||
3391 | spin_unlock_irq(&phba->hbalock); | ||
3392 | break; | ||
3393 | } | ||
3394 | spin_unlock_irq(&phba->hbalock); | ||
3397 | /* Otherwise, scan the entire FCF table and re-discover SAN */ | 3395 | /* Otherwise, scan the entire FCF table and re-discover SAN */ |
3398 | lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY, | 3396 | lpfc_printf_log(phba, KERN_INFO, LOG_FIP | LOG_DISCOVERY, |
3399 | "2770 Start FCF table scan due to new FCF " | 3397 | "2770 Start FCF table scan due to new FCF " |