[SCSI] lpfc driver 8.0.30 : fix lip/cablepull panic
authorJames.Smart@Emulex.Com <James.Smart@Emulex.Com>
Wed, 10 Aug 2005 19:02:50 +0000 (15:02 -0400)
committerJames Bottomley <jejb@mulgrave.(none)>
Fri, 12 Aug 2005 17:08:30 +0000 (12:08 -0500)
Fix panic on lip and cable pull

Symptoms: Panic on lip or cable pull

Cause: Use after free of nlp in lpfc_nlp_remove()

Fix: Do not make FC transport calls after a node is removed. Transport
calls are disabled by ignoring the initial delete transition.

Signed-off-by: James Smart <James.Smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/lpfc/lpfc_hbadisc.c

index 233901e9dfde56b166ee77d9930286e7bc88d447..2e44824a3bd535bcee987d60f25bd267b10afdbe 100644 (file)
@@ -1135,6 +1135,8 @@ lpfc_nlp_list(struct lpfc_hba * phba, struct lpfc_nodelist * nlp, int list)
        switch(list) {
        case NLP_NO_LIST: /* No list, just remove it */
                lpfc_nlp_remove(phba, nlp);
        switch(list) {
        case NLP_NO_LIST: /* No list, just remove it */
                lpfc_nlp_remove(phba, nlp);
+               /* as node removed - stop further transport calls */
+               rport_del = none;
                break;
        case NLP_UNUSED_LIST:
                spin_lock_irq(phba->host->host_lock);
                break;
        case NLP_UNUSED_LIST:
                spin_lock_irq(phba->host->host_lock);