aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_init.c
diff options
context:
space:
mode:
authorJames Smart <james.smart@emulex.com>2010-02-26 14:14:23 -0500
committerJames Bottomley <James.Bottomley@suse.de>2010-03-03 08:39:18 -0500
commit0f65ff680f90281d49ee864965f06774eba9657d (patch)
treec12332bc872aaf2616b94b38cfb5d76a510b1272 /drivers/scsi/lpfc/lpfc_init.c
parente40a02c12581f710877da372b5d7e15b68a1c5c3 (diff)
[SCSI] lpfc 8.3.10: Update SLI interface areas
- Clear LPFC_DRIVER_ABORTED on FCP command completion. - Clear exchange busy flag when I/O is aborted and found on aborted list. - Free sglq when XRI_ABORTED event is processed before release of IOCB. - Only process iocb as aborted when LPFC_DRIVER_ABORTED is set. 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.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 437ddc92ebea..b7889c53fe23 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -822,6 +822,8 @@ lpfc_hba_down_post_s4(struct lpfc_hba *phba)
822 LIST_HEAD(aborts); 822 LIST_HEAD(aborts);
823 int ret; 823 int ret;
824 unsigned long iflag = 0; 824 unsigned long iflag = 0;
825 struct lpfc_sglq *sglq_entry = NULL;
826
825 ret = lpfc_hba_down_post_s3(phba); 827 ret = lpfc_hba_down_post_s3(phba);
826 if (ret) 828 if (ret)
827 return ret; 829 return ret;
@@ -837,6 +839,10 @@ lpfc_hba_down_post_s4(struct lpfc_hba *phba)
837 * list. 839 * list.
838 */ 840 */
839 spin_lock(&phba->sli4_hba.abts_sgl_list_lock); 841 spin_lock(&phba->sli4_hba.abts_sgl_list_lock);
842 list_for_each_entry(sglq_entry,
843 &phba->sli4_hba.lpfc_abts_els_sgl_list, list)
844 sglq_entry->state = SGL_FREED;
845
840 list_splice_init(&phba->sli4_hba.lpfc_abts_els_sgl_list, 846 list_splice_init(&phba->sli4_hba.lpfc_abts_els_sgl_list,
841 &phba->sli4_hba.lpfc_sgl_list); 847 &phba->sli4_hba.lpfc_sgl_list);
842 spin_unlock(&phba->sli4_hba.abts_sgl_list_lock); 848 spin_unlock(&phba->sli4_hba.abts_sgl_list_lock);
@@ -4412,6 +4418,7 @@ lpfc_init_sgl_list(struct lpfc_hba *phba)
4412 4418
4413 /* The list order is used by later block SGL registraton */ 4419 /* The list order is used by later block SGL registraton */
4414 spin_lock_irq(&phba->hbalock); 4420 spin_lock_irq(&phba->hbalock);
4421 sglq_entry->state = SGL_FREED;
4415 list_add_tail(&sglq_entry->list, &phba->sli4_hba.lpfc_sgl_list); 4422 list_add_tail(&sglq_entry->list, &phba->sli4_hba.lpfc_sgl_list);
4416 phba->sli4_hba.lpfc_els_sgl_array[i] = sglq_entry; 4423 phba->sli4_hba.lpfc_els_sgl_array[i] = sglq_entry;
4417 phba->sli4_hba.total_sglq_bufs++; 4424 phba->sli4_hba.total_sglq_bufs++;