Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI updates from James Bottomley: "The usual driver updates (ufs, qla2xxx, tcmu, ibmvfc, lpfc, smartpqi, hisi_sas, qedi, qedf, mpt3sas) and minor bug fixes. There are only three core changes: adding sense codes, cleaning up noretry and adding an option for limitless retries" * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (226 commits) scsi: hisi_sas: Recover PHY state according to the status before reset scsi: hisi_sas: Filter out new PHY up events during suspend scsi: hisi_sas: Add device link between SCSI devices and hisi_hba scsi: hisi_sas: Add check for methods _PS0 and _PR0 scsi: hisi_sas: Add controller runtime PM support for v3 hw scsi: hisi_sas: Switch to new framework to support suspend and resume scsi: hisi_sas: Use hisi_hba->cq_nvecs for calling calling synchronize_irq() scsi: qedf: Remove redundant assignment to variable 'rc' scsi: lpfc: Remove unneeded variable 'status' in lpfc_fcp_cpu_map_store() scsi: snic: Convert to use DEFINE_SEQ_ATTRIBUTE macro scsi: qla4xxx: Delete unneeded variable 'status' in qla4xxx_process_ddb_changed scsi: sun_esp: Use module_platform_driver to simplify the code scsi: sun3x_esp: Use module_platform_driver to simplify the code scsi: sni_53c710: Use module_platform_driver to simplify the code scsi: qlogicpti: Use module_platform_driver to simplify the code scsi: mac_esp: Use module_platform_driver to simplify the code scsi: jazz_esp: Use module_platform_driver to simplify the code scsi: mvumi: Fix error return in mvumi_io_attach() scsi: lpfc: Drop nodelist reference on error in lpfc_gen_req() scsi: be2iscsi: Fix a theoretical leak in beiscsi_create_eqs() ...
This commit is contained in:
@@ -116,6 +116,14 @@ static int scsi_host_eh_past_deadline(struct Scsi_Host *shost)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static bool scsi_cmd_retry_allowed(struct scsi_cmnd *cmd)
|
||||
{
|
||||
if (cmd->allowed == SCSI_CMD_RETRIES_NO_LIMIT)
|
||||
return true;
|
||||
|
||||
return ++cmd->retries <= cmd->allowed;
|
||||
}
|
||||
|
||||
/**
|
||||
* scmd_eh_abort_handler - Handle command aborts
|
||||
* @work: command to be aborted.
|
||||
@@ -151,7 +159,7 @@ scmd_eh_abort_handler(struct work_struct *work)
|
||||
"eh timeout, not retrying "
|
||||
"aborted command\n"));
|
||||
} else if (!scsi_noretry_cmd(scmd) &&
|
||||
(++scmd->retries <= scmd->allowed)) {
|
||||
scsi_cmd_retry_allowed(scmd)) {
|
||||
SCSI_LOG_ERROR_RECOVERY(3,
|
||||
scmd_printk(KERN_WARNING, scmd,
|
||||
"retry aborted command\n"));
|
||||
@@ -1264,11 +1272,18 @@ int scsi_eh_get_sense(struct list_head *work_q,
|
||||
* upper level.
|
||||
*/
|
||||
if (rtn == SUCCESS)
|
||||
/* we don't want this command reissued, just
|
||||
* finished with the sense data, so set
|
||||
* retries to the max allowed to ensure it
|
||||
* won't get reissued */
|
||||
scmd->retries = scmd->allowed;
|
||||
/*
|
||||
* We don't want this command reissued, just finished
|
||||
* with the sense data, so set retries to the max
|
||||
* allowed to ensure it won't get reissued. If the user
|
||||
* has requested infinite retries, we also want to
|
||||
* finish this command, so force completion by setting
|
||||
* retries and allowed to the same value.
|
||||
*/
|
||||
if (scmd->allowed == SCSI_CMD_RETRIES_NO_LIMIT)
|
||||
scmd->retries = scmd->allowed = 1;
|
||||
else
|
||||
scmd->retries = scmd->allowed;
|
||||
else if (rtn != NEEDS_RETRY)
|
||||
continue;
|
||||
|
||||
@@ -1755,8 +1770,8 @@ check_type:
|
||||
if (scmd->request->cmd_flags & REQ_FAILFAST_DEV ||
|
||||
blk_rq_is_passthrough(scmd->request))
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1944,8 +1959,7 @@ maybe_retry:
|
||||
* the request was not marked fast fail. Note that above,
|
||||
* even if the request is marked fast fail, we still requeue
|
||||
* for queue congestion conditions (QUEUE_FULL or BUSY) */
|
||||
if ((++scmd->retries) <= scmd->allowed
|
||||
&& !scsi_noretry_cmd(scmd)) {
|
||||
if (scsi_cmd_retry_allowed(scmd) && !scsi_noretry_cmd(scmd)) {
|
||||
return NEEDS_RETRY;
|
||||
} else {
|
||||
/*
|
||||
@@ -2091,8 +2105,7 @@ void scsi_eh_flush_done_q(struct list_head *done_q)
|
||||
list_for_each_entry_safe(scmd, next, done_q, eh_entry) {
|
||||
list_del_init(&scmd->eh_entry);
|
||||
if (scsi_device_online(scmd->device) &&
|
||||
!scsi_noretry_cmd(scmd) &&
|
||||
(++scmd->retries <= scmd->allowed)) {
|
||||
!scsi_noretry_cmd(scmd) && scsi_cmd_retry_allowed(scmd)) {
|
||||
SCSI_LOG_ERROR_RECOVERY(3,
|
||||
scmd_printk(KERN_INFO, scmd,
|
||||
"%s: flush retry cmd\n",
|
||||
|
Reference in New Issue
Block a user