[SCSI] 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

Signed-off-by: James Smart <James.Smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
James Smart 2006-03-07 15:04:06 -05:00 committed by James Bottomley
parent fdcebe282f
commit 1a169689c2
2 changed files with 15 additions and 0 deletions

View File

@ -1523,6 +1523,12 @@ lpfc_els_retry_delay_handler(struct lpfc_nodelist *ndlp)
ndlp->nlp_flag &= ~NLP_DELAY_TMO; ndlp->nlp_flag &= ~NLP_DELAY_TMO;
spin_unlock_irq(phba->host->host_lock); 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; retry = ndlp->nlp_retry;
switch (cmd) { switch (cmd) {

View File

@ -68,6 +68,15 @@ lpfc_process_nodev_timeout(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
return; 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; ndlp->nlp_flag &= ~NLP_NODEV_TMO;
if (ndlp->nlp_sid != NLP_NO_SID) { if (ndlp->nlp_sid != NLP_NO_SID) {