Skip to contentSkip to conversation

lpfc 8.1.4 : Fixed a timer panic due to timer firing after freeing ndlp

PATCH In review James Smart 1 participant 1 message Mar 7, 2006

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 3/6 lpfc 8.1.4 : Fixed a timer panic due to timer firing after freeing ndlp

Fixed a timer panic due to timer firing after freeing ndlp

drivers/scsi/lpfc/lpfc_hbadisc.c +9 -0
@@ -68,6 +68,15 @@ lpfc_process_nodev_timeout(struct lpfc_h
 		return;
 	}
 
+	/*
+	 * If a discovery event readded nodev_timer after timer
+	 * firing and before processing the timer, cancel the
+	 * nlp_tmofunc.
+	 */
+	spin_unlock_irq(phba->host->host_lock);
+	del_timer_sync(&ndlp->nlp_tmofunc);
+	spin_lock_irq(phba->host->host_lock);
+
 	ndlp->nlp_flag &= ~NLP_NODEV_TMO;
 
 	if (ndlp->nlp_sid != NLP_NO_SID) {
drivers/scsi/lpfc/lpfc_els.c +6 -0
@@ -1523,6 +1523,12 @@ lpfc_els_retry_delay_handler(struct lpfc
 
 	ndlp->nlp_flag &= ~NLP_DELAY_TMO;
 	spin_unlock_irq(phba->host->host_lock);
+	/*
+	 * If a discovery event readded nlp_delayfunc after timer
+	 * firing and before processing the timer, cancel the
+	 * nlp_delayfunc.
+	 */
+	del_timer_sync(&ndlp->nlp_delayfunc);
 	retry = ndlp->nlp_retry;
 
 	switch (cmd) {