[SCSI] lpfc 8.3.0 : Fix several minor issues
- Avoid polling HBA Error Attention when HBA's PCI channel is offline due to PCI EEH - Fix handling of RSCN with non-zero event qualifiers - Remove unnecessary sleeps during HBA initialization which slow down driver load - Fix internal and external loopback on FCoE HBAs - Fix incorrect decrement of cmd_pending count in lpfc_queuecomand error path - Fix reporting of port busy events to management application - Rename lpfc_adjust_queue_depth() to lpfc_rampdown_queue_depth() for consistency with its partner lpfc_rampup_queue_depth() - Delete redundant lpfc_cmd->start_time = jiffies assignment in lpfc_queuecommand() - Fix handling for ELS, mailbox and heartbeat time outs in the worker thread by removing unnecessary checking of the work_port_events flags. - Fix NULL pointer dereference in lpfc_prep_els_iocb - In lpfc_device_recov_npr_node(), move clearing of NLP_NPR_2B_DISC flag after call to lpfc_cancel_retry_delay_tmo() to keep targets-in-discovery count correct - Remove lpfc_probe_one()'s call to scsi_scan_host() which could cause concurrent SCSI scans to step on each other Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
committed by
James Bottomley
parent
8f34f4cea3
commit
eaf15d5b56
@@ -148,7 +148,7 @@ lpfc_send_sdev_queuedepth_change_event(struct lpfc_hba *phba,
|
||||
}
|
||||
|
||||
/**
|
||||
* lpfc_adjust_queue_depth: Post RAMP_DOWN_QUEUE event for worker thread.
|
||||
* lpfc_rampdown_queue_depth: Post RAMP_DOWN_QUEUE event to worker thread.
|
||||
* @phba: The Hba for which this call is being executed.
|
||||
*
|
||||
* This routine is called when there is resource error in driver or firmware.
|
||||
@@ -159,7 +159,7 @@ lpfc_send_sdev_queuedepth_change_event(struct lpfc_hba *phba,
|
||||
* This routine should be called with no lock held.
|
||||
**/
|
||||
void
|
||||
lpfc_adjust_queue_depth(struct lpfc_hba *phba)
|
||||
lpfc_rampdown_queue_depth(struct lpfc_hba *phba)
|
||||
{
|
||||
unsigned long flags;
|
||||
uint32_t evt_posted;
|
||||
@@ -1551,7 +1551,7 @@ lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
|
||||
|
||||
lpfc_cmd = lpfc_get_scsi_buf(phba);
|
||||
if (lpfc_cmd == NULL) {
|
||||
lpfc_adjust_queue_depth(phba);
|
||||
lpfc_rampdown_queue_depth(phba);
|
||||
|
||||
lpfc_printf_vlog(vport, KERN_INFO, LOG_FCP,
|
||||
"0707 driver's buffer pool is empty, "
|
||||
@@ -1559,7 +1559,6 @@ lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
|
||||
goto out_host_busy;
|
||||
}
|
||||
|
||||
lpfc_cmd->start_time = jiffies;
|
||||
/*
|
||||
* Store the midlayer's command structure for the completion phase
|
||||
* and complete the command initialization.
|
||||
@@ -1580,9 +1579,10 @@ lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
|
||||
atomic_inc(&ndlp->cmd_pending);
|
||||
err = lpfc_sli_issue_iocb(phba, &phba->sli.ring[psli->fcp_ring],
|
||||
&lpfc_cmd->cur_iocbq, SLI_IOCB_RET_IOCB);
|
||||
if (err)
|
||||
if (err) {
|
||||
atomic_dec(&ndlp->cmd_pending);
|
||||
goto out_host_busy_free_buf;
|
||||
|
||||
}
|
||||
if (phba->cfg_poll & ENABLE_FCP_RING_POLLING) {
|
||||
lpfc_sli_poll_fcp_ring(phba);
|
||||
if (phba->cfg_poll & DISABLE_FCP_RING_INT)
|
||||
@@ -1592,7 +1592,6 @@ lpfc_queuecommand(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
|
||||
return 0;
|
||||
|
||||
out_host_busy_free_buf:
|
||||
atomic_dec(&ndlp->cmd_pending);
|
||||
lpfc_scsi_unprep_dma_buf(phba, lpfc_cmd);
|
||||
lpfc_release_scsi_buf(phba, lpfc_cmd);
|
||||
out_host_busy:
|
||||
|
Reference in New Issue
Block a user