diff options
author | James Smart <james.smart@emulex.com> | 2011-02-16 12:39:35 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2011-02-18 13:45:21 -0500 |
commit | 1151e3ec15c32021a8a12a123459ab5e41692898 (patch) | |
tree | 57cf6cf10dbd7e77654958987ca0f840311fcf2d /drivers/scsi/lpfc/lpfc_hbadisc.c | |
parent | fedd3b7b93302c7789bd3eeb190653cfb0fe7645 (diff) |
[SCSI] lpfc 8.3.21: RRQ Implementation fixes
RRQ Implementation fixes
- Added checks to prevent a call to findnode_did in clr_active_rrq
- Added the del_sync_timer call for the rrq_tmr to the stop_hba_timers routine.
- Added a check in __lpfc_set_active_rrq for the driver unloading to prevent
adding an rrq when the driver is being removed.
- Add code to scsi_iocb_cmpl to check for the remote stop and add the rrq.
- Added the same check to els retry.
- Added code to compare the source did in the els rrq to the vports did and
chose the right exchange ID.
- Initialize the start_cmd pointer to indicate when we have looped through
all of the scsi buffers.
- Remove the need for the lock around the clearing of the active bit in the
rrq.
- Added code to clean the els and fcp xri aborted list and remove the all of
the RRQs for a deleted vport.
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_hbadisc.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_hbadisc.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c index 1f9c7f19c31f..63300be2e45b 100644 --- a/drivers/scsi/lpfc/lpfc_hbadisc.c +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c | |||
@@ -3160,7 +3160,7 @@ lpfc_mbx_cmpl_unreg_vpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb) | |||
3160 | spin_unlock_irq(shost->host_lock); | 3160 | spin_unlock_irq(shost->host_lock); |
3161 | vport->unreg_vpi_cmpl = VPORT_OK; | 3161 | vport->unreg_vpi_cmpl = VPORT_OK; |
3162 | mempool_free(pmb, phba->mbox_mem_pool); | 3162 | mempool_free(pmb, phba->mbox_mem_pool); |
3163 | lpfc_cleanup_vports_rrqs(vport); | 3163 | lpfc_cleanup_vports_rrqs(vport, NULL); |
3164 | /* | 3164 | /* |
3165 | * This shost reference might have been taken at the beginning of | 3165 | * This shost reference might have been taken at the beginning of |
3166 | * lpfc_vport_delete() | 3166 | * lpfc_vport_delete() |
@@ -3900,6 +3900,8 @@ lpfc_drop_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) | |||
3900 | if (ndlp->nlp_state == NLP_STE_UNUSED_NODE) | 3900 | if (ndlp->nlp_state == NLP_STE_UNUSED_NODE) |
3901 | return; | 3901 | return; |
3902 | lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNUSED_NODE); | 3902 | lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNUSED_NODE); |
3903 | if (vport->phba->sli_rev == LPFC_SLI_REV4) | ||
3904 | lpfc_cleanup_vports_rrqs(vport, ndlp); | ||
3903 | lpfc_nlp_put(ndlp); | 3905 | lpfc_nlp_put(ndlp); |
3904 | return; | 3906 | return; |
3905 | } | 3907 | } |
@@ -4289,7 +4291,7 @@ lpfc_cleanup_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) | |||
4289 | 4291 | ||
4290 | list_del_init(&ndlp->els_retry_evt.evt_listp); | 4292 | list_del_init(&ndlp->els_retry_evt.evt_listp); |
4291 | list_del_init(&ndlp->dev_loss_evt.evt_listp); | 4293 | list_del_init(&ndlp->dev_loss_evt.evt_listp); |
4292 | 4294 | lpfc_cleanup_vports_rrqs(vport, ndlp); | |
4293 | lpfc_unreg_rpi(vport, ndlp); | 4295 | lpfc_unreg_rpi(vport, ndlp); |
4294 | 4296 | ||
4295 | return 0; | 4297 | return 0; |