aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_els.c
diff options
context:
space:
mode:
authorJames Smart <James.Smart@Emulex.Com>2007-10-27 13:37:53 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-01-11 19:22:33 -0500
commita8adb83208020c913f010cb4e26d09e25300db8e (patch)
tree2245ca9f0dba5139946c99d45b80e7f2ce324b74 /drivers/scsi/lpfc/lpfc_els.c
parent87af33fe5f78c27cf9e43c6e586dd6efd4be3e40 (diff)
[SCSI] lpfc 8.2.3 : Miscellaneous Small Fixes - part 2
Miscellaneous Small Fixes - part 2 - Fix ndlp left in PLOGI state after link up - Fix cannot rcv unsol ELS frames after running HBA resets for a few minutes - Fix HBQ buffer_count implemention - Fix RPI leak - Fix crash while deleting vports while HBA is reset - Revert the FCP Fbits offset back to 7 - Fix panic when deleting vports - Remove unused code in switch statement outside of a case - Reject PLOGI from invalid PName or NName of 0 - Ignore PLOGI responses from WWPName or WWNName of 0 - Fix debugfs hbqinfo display for ppc - Added 8G to list of supported speeds for sysfs parameter - Defer ndlp cleanup to dev-loss timeout handler - Added support for WRITE_VPARMS mailbox command by applications 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_els.c')
-rw-r--r--drivers/scsi/lpfc/lpfc_els.c34
1 files changed, 26 insertions, 8 deletions
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 0a5006ea9909..9315c3c2e6f6 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -2069,9 +2069,25 @@ int
2069lpfc_els_free_iocb(struct lpfc_hba *phba, struct lpfc_iocbq *elsiocb) 2069lpfc_els_free_iocb(struct lpfc_hba *phba, struct lpfc_iocbq *elsiocb)
2070{ 2070{
2071 struct lpfc_dmabuf *buf_ptr, *buf_ptr1; 2071 struct lpfc_dmabuf *buf_ptr, *buf_ptr1;
2072 struct lpfc_nodelist *ndlp;
2072 2073
2073 if (elsiocb->context1) { 2074 ndlp = (struct lpfc_nodelist *)elsiocb->context1;
2074 lpfc_nlp_put(elsiocb->context1); 2075 if (ndlp) {
2076 if (ndlp->nlp_flag & NLP_DEFER_RM) {
2077 lpfc_nlp_put(ndlp);
2078
2079 /* If the ndlp is not being used by another discovery
2080 * thread, free it.
2081 */
2082 if (!lpfc_nlp_not_used(ndlp)) {
2083 /* If ndlp is being used by another discovery
2084 * thread, just clear NLP_DEFER_RM
2085 */
2086 ndlp->nlp_flag &= ~NLP_DEFER_RM;
2087 }
2088 }
2089 else
2090 lpfc_nlp_put(ndlp);
2075 elsiocb->context1 = NULL; 2091 elsiocb->context1 = NULL;
2076 } 2092 }
2077 /* context2 = cmd, context2->next = rsp, context3 = bpl */ 2093 /* context2 = cmd, context2->next = rsp, context3 = bpl */
@@ -2130,13 +2146,15 @@ lpfc_mbx_cmpl_dflt_rpi(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
2130 lpfc_mbuf_free(phba, mp->virt, mp->phys); 2146 lpfc_mbuf_free(phba, mp->virt, mp->phys);
2131 kfree(mp); 2147 kfree(mp);
2132 mempool_free(pmb, phba->mbox_mem_pool); 2148 mempool_free(pmb, phba->mbox_mem_pool);
2133 lpfc_nlp_put(ndlp); 2149 if (ndlp) {
2150 lpfc_nlp_put(ndlp);
2134 2151
2135 /* This is the end of the default RPI cleanup logic for this 2152 /* This is the end of the default RPI cleanup logic for this
2136 * ndlp. If no other discovery threads are using this ndlp. 2153 * ndlp. If no other discovery threads are using this ndlp.
2137 * we should free all resources associated with it. 2154 * we should free all resources associated with it.
2138 */ 2155 */
2139 lpfc_nlp_not_used(ndlp); 2156 lpfc_nlp_not_used(ndlp);
2157 }
2140 return; 2158 return;
2141} 2159}
2142 2160