Merge tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI updates from James Bottomley: "This is mostly updates of the usual drivers: arcmsr, qla2xx, lpfc, ufs, mpt3sas, hisi_sas. In addition we have removed several really old drivers: sym53c416, NCR53c406a, fdomain, fdomain_cs and removed the old scsi_module.c initialization from all remaining drivers. Plus an assortment of bug fixes, initialization errors and other minor fixes" * tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (168 commits) scsi: ufs: Add support for Auto-Hibernate Idle Timer scsi: ufs: sysfs: reworking of the rpm_lvl and spm_lvl entries scsi: qla2xxx: fx00 copypaste typo scsi: qla2xxx: fix error message on <qla2400 scsi: smartpqi: update driver version scsi: smartpqi: workaround fw bug for oq deletion scsi: arcmsr: Change driver version to v1.40.00.05-20180309 scsi: arcmsr: Sleep to avoid CPU stuck too long for waiting adapter ready scsi: arcmsr: Handle adapter removed due to thunderbolt cable disconnection. scsi: arcmsr: Rename ACB_F_BUS_HANG_ON to ACB_F_ADAPTER_REMOVED for adapter hot-plug scsi: qla2xxx: Update driver version to 10.00.00.06-k scsi: qla2xxx: Fix Async GPN_FT for FCP and FC-NVMe scan scsi: qla2xxx: Cleanup code to improve FC-NVMe error handling scsi: qla2xxx: Fix FC-NVMe IO abort during driver reset scsi: qla2xxx: Fix retry for PRLI RJT with reason of BUSY scsi: qla2xxx: Remove nvme_done_list scsi: qla2xxx: Return busy if rport going away scsi: qla2xxx: Fix n2n_ae flag to prevent dev_loss on PDB change scsi: qla2xxx: Add FC-NVMe abort processing scsi: qla2xxx: Add changes for devloss timeout in driver ...
This commit is contained in:
@@ -191,7 +191,19 @@ static void __scsi_queue_insert(struct scsi_cmnd *cmd, int reason, bool unbusy)
|
||||
*/
|
||||
cmd->result = 0;
|
||||
if (q->mq_ops) {
|
||||
scsi_mq_requeue_cmd(cmd);
|
||||
/*
|
||||
* Before a SCSI command is dispatched,
|
||||
* get_device(&sdev->sdev_gendev) is called and the host,
|
||||
* target and device busy counters are increased. Since
|
||||
* requeuing a request causes these actions to be repeated and
|
||||
* since scsi_device_unbusy() has already been called,
|
||||
* put_device(&device->sdev_gendev) must still be called. Call
|
||||
* put_device() after blk_mq_requeue_request() to avoid that
|
||||
* removal of the SCSI device can start before requeueing has
|
||||
* happened.
|
||||
*/
|
||||
blk_mq_requeue_request(cmd->request, true);
|
||||
put_device(&device->sdev_gendev);
|
||||
return;
|
||||
}
|
||||
spin_lock_irqsave(q->queue_lock, flags);
|
||||
@@ -858,6 +870,17 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
|
||||
/* for passthrough error may be set */
|
||||
error = BLK_STS_OK;
|
||||
}
|
||||
/*
|
||||
* Another corner case: the SCSI status byte is non-zero but 'good'.
|
||||
* Example: PRE-FETCH command returns SAM_STAT_CONDITION_MET when
|
||||
* it is able to fit nominated LBs in its cache (and SAM_STAT_GOOD
|
||||
* if it can't fit). Treat SAM_STAT_CONDITION_MET and the related
|
||||
* intermediate statuses (both obsolete in SAM-4) as good.
|
||||
*/
|
||||
if (status_byte(result) && scsi_status_is_good(result)) {
|
||||
result = 0;
|
||||
error = BLK_STS_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* special case: failed zero length commands always need to
|
||||
@@ -2611,7 +2634,7 @@ scsi_test_unit_ready(struct scsi_device *sdev, int timeout, int retries,
|
||||
/* try to eat the UNIT_ATTENTION if there are enough retries */
|
||||
do {
|
||||
result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0, sshdr,
|
||||
timeout, retries, NULL);
|
||||
timeout, 1, NULL);
|
||||
if (sdev->removable && scsi_sense_valid(sshdr) &&
|
||||
sshdr->sense_key == UNIT_ATTENTION)
|
||||
sdev->changed = 1;
|
||||
|
Reference in New Issue
Block a user