aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Smart <James.Smart@Emulex.Com>2006-03-07 15:04:06 -0500
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2006-03-12 09:56:38 -0500
commit1a169689c2152ea599c94d622204f7bf5b7dc09f (patch)
treee9a354d5970de009b8c1ec647e31835a0bf09423
parentfdcebe282fd8654381852260efec267eff8002fb (diff)
[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>
-rw-r--r--drivers/scsi/lpfc/lpfc_els.c6
-rw-r--r--drivers/scsi/lpfc/lpfc_hbadisc.c9
2 files changed, 15 insertions, 0 deletions
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index 6d12cd0c49ff..4813beaaca8f 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -1523,6 +1523,12 @@ lpfc_els_retry_delay_handler(struct lpfc_nodelist *ndlp)
1523 1523
1524 ndlp->nlp_flag &= ~NLP_DELAY_TMO; 1524 ndlp->nlp_flag &= ~NLP_DELAY_TMO;
1525 spin_unlock_irq(phba->host->host_lock); 1525 spin_unlock_irq(phba->host->host_lock);
1526 /*
1527 * If a discovery event readded nlp_delayfunc after timer
1528 * firing and before processing the timer, cancel the
1529 * nlp_delayfunc.
1530 */
1531 del_timer_sync(&ndlp->nlp_delayfunc);
1526 retry = ndlp->nlp_retry; 1532 retry = ndlp->nlp_retry;
1527 1533
1528 switch (cmd) { 1534 switch (cmd) {
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index e15120d21aaa..82704148d5d4 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -68,6 +68,15 @@ lpfc_process_nodev_timeout(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp)
68 return; 68 return;
69 } 69 }
70 70
71 /*
72 * If a discovery event readded nodev_timer after timer
73 * firing and before processing the timer, cancel the
74 * nlp_tmofunc.
75 */
76 spin_unlock_irq(phba->host->host_lock);
77 del_timer_sync(&ndlp->nlp_tmofunc);
78 spin_lock_irq(phba->host->host_lock);
79
71 ndlp->nlp_flag &= ~NLP_NODEV_TMO; 80 ndlp->nlp_flag &= ~NLP_NODEV_TMO;
72 81
73 if (ndlp->nlp_sid != NLP_NO_SID) { 82 if (ndlp->nlp_sid != NLP_NO_SID) {