diff options
author | James Smart <James.Smart@Emulex.Com> | 2006-03-07 15:04:06 -0500 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-03-12 09:56:38 -0500 |
commit | 1a169689c2152ea599c94d622204f7bf5b7dc09f (patch) | |
tree | e9a354d5970de009b8c1ec647e31835a0bf09423 /drivers | |
parent | fdcebe282fd8654381852260efec267eff8002fb (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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_els.c | 6 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_hbadisc.c | 9 |
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) { |