diff options
author | James Smart <james.smart@emulex.com> | 2010-02-26 14:14:23 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-03-03 08:39:18 -0500 |
commit | 0f65ff680f90281d49ee864965f06774eba9657d (patch) | |
tree | c12332bc872aaf2616b94b38cfb5d76a510b1272 /drivers/scsi/lpfc/lpfc_init.c | |
parent | e40a02c12581f710877da372b5d7e15b68a1c5c3 (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.c | 7 |
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++; |