|
@@ -6223,11 +6223,11 @@ lpfc_els_timeout(unsigned long ptr)
|
|
|
|
|
|
spin_lock_irqsave(&vport->work_port_lock, iflag);
|
|
|
tmo_posted = vport->work_port_events & WORKER_ELS_TMO;
|
|
|
- if (!tmo_posted)
|
|
|
+ if ((!tmo_posted) && (!(vport->load_flag & FC_UNLOADING)))
|
|
|
vport->work_port_events |= WORKER_ELS_TMO;
|
|
|
spin_unlock_irqrestore(&vport->work_port_lock, iflag);
|
|
|
|
|
|
- if (!tmo_posted)
|
|
|
+ if ((!tmo_posted) && (!(vport->load_flag & FC_UNLOADING)))
|
|
|
lpfc_worker_wake_up(phba);
|
|
|
return;
|
|
|
}
|
|
@@ -6259,10 +6259,19 @@ lpfc_els_timeout_handler(struct lpfc_vport *vport)
|
|
|
timeout = (uint32_t)(phba->fc_ratov << 1);
|
|
|
|
|
|
pring = &phba->sli.ring[LPFC_ELS_RING];
|
|
|
+ if ((phba->pport->load_flag & FC_UNLOADING))
|
|
|
+ return;
|
|
|
spin_lock_irq(&phba->hbalock);
|
|
|
if (phba->sli_rev == LPFC_SLI_REV4)
|
|
|
spin_lock(&pring->ring_lock);
|
|
|
|
|
|
+ if ((phba->pport->load_flag & FC_UNLOADING)) {
|
|
|
+ if (phba->sli_rev == LPFC_SLI_REV4)
|
|
|
+ spin_unlock(&pring->ring_lock);
|
|
|
+ spin_unlock_irq(&phba->hbalock);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
list_for_each_entry_safe(piocb, tmp_iocb, &pring->txcmplq, list) {
|
|
|
cmd = &piocb->iocb;
|
|
|
|
|
@@ -6319,8 +6328,9 @@ lpfc_els_timeout_handler(struct lpfc_vport *vport)
|
|
|
}
|
|
|
|
|
|
if (!list_empty(&phba->sli.ring[LPFC_ELS_RING].txcmplq))
|
|
|
- mod_timer(&vport->els_tmofunc,
|
|
|
- jiffies + msecs_to_jiffies(1000 * timeout));
|
|
|
+ if (!(phba->pport->load_flag & FC_UNLOADING))
|
|
|
+ mod_timer(&vport->els_tmofunc,
|
|
|
+ jiffies + msecs_to_jiffies(1000 * timeout));
|
|
|
}
|
|
|
|
|
|
/**
|