mirror of
https://github.com/torvalds/linux.git
synced 2024-10-31 17:21:49 +00:00
[SCSI] qla2xxx: Remove qla2x00_wait_for_loop_ready function.
This function can wait for 5min under certain scenarios. One of them is when the port is down from switch and bus reset is issued. The bus reset used to wait for 5 minutes for the loop and upper layer callers used to hang and give stack trace because of getting stuck for 120 sec. It is legacy code that was used when the driver used to do queuing of the commands. Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com> Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
f6a290b419
commit
ad537689c3
@ -814,49 +814,6 @@ qla2x00_wait_for_chip_reset(scsi_qla_host_t *vha)
|
||||
return return_status;
|
||||
}
|
||||
|
||||
/*
|
||||
* qla2x00_wait_for_loop_ready
|
||||
* Wait for MAX_LOOP_TIMEOUT(5 min) value for loop
|
||||
* to be in LOOP_READY state.
|
||||
* Input:
|
||||
* ha - pointer to host adapter structure
|
||||
*
|
||||
* Note:
|
||||
* Does context switching-Release SPIN_LOCK
|
||||
* (if any) before calling this routine.
|
||||
*
|
||||
*
|
||||
* Return:
|
||||
* Success (LOOP_READY) : 0
|
||||
* Failed (LOOP_NOT_READY) : 1
|
||||
*/
|
||||
static inline int
|
||||
qla2x00_wait_for_loop_ready(scsi_qla_host_t *vha)
|
||||
{
|
||||
int return_status = QLA_SUCCESS;
|
||||
unsigned long loop_timeout ;
|
||||
struct qla_hw_data *ha = vha->hw;
|
||||
scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev);
|
||||
|
||||
/* wait for 5 min at the max for loop to be ready */
|
||||
loop_timeout = jiffies + (MAX_LOOP_TIMEOUT * HZ);
|
||||
|
||||
while ((!atomic_read(&base_vha->loop_down_timer) &&
|
||||
atomic_read(&base_vha->loop_state) == LOOP_DOWN) ||
|
||||
atomic_read(&base_vha->loop_state) != LOOP_READY) {
|
||||
if (atomic_read(&base_vha->loop_state) == LOOP_DEAD) {
|
||||
return_status = QLA_FUNCTION_FAILED;
|
||||
break;
|
||||
}
|
||||
msleep(1000);
|
||||
if (time_after_eq(jiffies, loop_timeout)) {
|
||||
return_status = QLA_FUNCTION_FAILED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (return_status);
|
||||
}
|
||||
|
||||
static void
|
||||
sp_get(struct srb *sp)
|
||||
{
|
||||
@ -1035,12 +992,6 @@ __qla2xxx_eh_generic_reset(char *name, enum nexus_wait_type type,
|
||||
"Wait for hba online failed for cmd=%p.\n", cmd);
|
||||
goto eh_reset_failed;
|
||||
}
|
||||
err = 1;
|
||||
if (qla2x00_wait_for_loop_ready(vha) != QLA_SUCCESS) {
|
||||
ql_log(ql_log_warn, vha, 0x800b,
|
||||
"Wait for loop ready failed for cmd=%p.\n", cmd);
|
||||
goto eh_reset_failed;
|
||||
}
|
||||
err = 2;
|
||||
if (do_reset(fcport, cmd->device->lun, cmd->request->cpu + 1)
|
||||
!= QLA_SUCCESS) {
|
||||
@ -1137,10 +1088,9 @@ qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd)
|
||||
goto eh_bus_reset_done;
|
||||
}
|
||||
|
||||
if (qla2x00_wait_for_loop_ready(vha) == QLA_SUCCESS) {
|
||||
if (qla2x00_loop_reset(vha) == QLA_SUCCESS)
|
||||
ret = SUCCESS;
|
||||
}
|
||||
|
||||
if (ret == FAILED)
|
||||
goto eh_bus_reset_done;
|
||||
|
||||
@ -1206,15 +1156,6 @@ qla2xxx_eh_host_reset(struct scsi_cmnd *cmd)
|
||||
if (qla2x00_wait_for_reset_ready(vha) != QLA_SUCCESS)
|
||||
goto eh_host_reset_lock;
|
||||
|
||||
/*
|
||||
* Fixme-may be dpc thread is active and processing
|
||||
* loop_resync,so wait a while for it to
|
||||
* be completed and then issue big hammer.Otherwise
|
||||
* it may cause I/O failure as big hammer marks the
|
||||
* devices as lost kicking of the port_down_timer
|
||||
* while dpc is stuck for the mailbox to complete.
|
||||
*/
|
||||
qla2x00_wait_for_loop_ready(vha);
|
||||
if (vha != base_vha) {
|
||||
if (qla2x00_vp_abort_isp(vha))
|
||||
goto eh_host_reset_lock;
|
||||
@ -1297,16 +1238,13 @@ qla2x00_loop_reset(scsi_qla_host_t *vha)
|
||||
atomic_set(&vha->loop_state, LOOP_DOWN);
|
||||
atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME);
|
||||
qla2x00_mark_all_devices_lost(vha, 0);
|
||||
qla2x00_wait_for_loop_ready(vha);
|
||||
}
|
||||
|
||||
if (ha->flags.enable_lip_reset) {
|
||||
ret = qla2x00_lip_reset(vha);
|
||||
if (ret != QLA_SUCCESS) {
|
||||
if (ret != QLA_SUCCESS)
|
||||
ql_dbg(ql_dbg_taskm, vha, 0x802e,
|
||||
"lip_reset failed (%d).\n", ret);
|
||||
} else
|
||||
qla2x00_wait_for_loop_ready(vha);
|
||||
}
|
||||
|
||||
/* Issue marker command only when we are going to start the I/O */
|
||||
|
Loading…
Reference in New Issue
Block a user