Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI fixes from James Bottomley: "One minor fix and two patches reworking the ata dma drain for the !CONFIG_LIBATA case. The latter is a 5.7 regression fix" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: Wire up ata_scsi_dma_need_drain for SAS HBA drivers scsi: libata: Provide an ata_scsi_dma_need_drain stub for !CONFIG_ATA scsi: ufs-bsg: Fix runtime PM imbalance on error
This commit is contained in:
@@ -40,6 +40,7 @@ static struct scsi_host_template aic94xx_sht = {
|
|||||||
/* .name is initialized */
|
/* .name is initialized */
|
||||||
.name = "aic94xx",
|
.name = "aic94xx",
|
||||||
.queuecommand = sas_queuecommand,
|
.queuecommand = sas_queuecommand,
|
||||||
|
.dma_need_drain = ata_scsi_dma_need_drain,
|
||||||
.target_alloc = sas_target_alloc,
|
.target_alloc = sas_target_alloc,
|
||||||
.slave_configure = sas_slave_configure,
|
.slave_configure = sas_slave_configure,
|
||||||
.scan_finished = asd_scan_finished,
|
.scan_finished = asd_scan_finished,
|
||||||
|
|||||||
@@ -1756,6 +1756,7 @@ static struct scsi_host_template sht_v1_hw = {
|
|||||||
.proc_name = DRV_NAME,
|
.proc_name = DRV_NAME,
|
||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
.queuecommand = sas_queuecommand,
|
.queuecommand = sas_queuecommand,
|
||||||
|
.dma_need_drain = ata_scsi_dma_need_drain,
|
||||||
.target_alloc = sas_target_alloc,
|
.target_alloc = sas_target_alloc,
|
||||||
.slave_configure = hisi_sas_slave_configure,
|
.slave_configure = hisi_sas_slave_configure,
|
||||||
.scan_finished = hisi_sas_scan_finished,
|
.scan_finished = hisi_sas_scan_finished,
|
||||||
|
|||||||
@@ -3532,6 +3532,7 @@ static struct scsi_host_template sht_v2_hw = {
|
|||||||
.proc_name = DRV_NAME,
|
.proc_name = DRV_NAME,
|
||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
.queuecommand = sas_queuecommand,
|
.queuecommand = sas_queuecommand,
|
||||||
|
.dma_need_drain = ata_scsi_dma_need_drain,
|
||||||
.target_alloc = sas_target_alloc,
|
.target_alloc = sas_target_alloc,
|
||||||
.slave_configure = hisi_sas_slave_configure,
|
.slave_configure = hisi_sas_slave_configure,
|
||||||
.scan_finished = hisi_sas_scan_finished,
|
.scan_finished = hisi_sas_scan_finished,
|
||||||
|
|||||||
@@ -3075,6 +3075,7 @@ static struct scsi_host_template sht_v3_hw = {
|
|||||||
.proc_name = DRV_NAME,
|
.proc_name = DRV_NAME,
|
||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
.queuecommand = sas_queuecommand,
|
.queuecommand = sas_queuecommand,
|
||||||
|
.dma_need_drain = ata_scsi_dma_need_drain,
|
||||||
.target_alloc = sas_target_alloc,
|
.target_alloc = sas_target_alloc,
|
||||||
.slave_configure = hisi_sas_slave_configure,
|
.slave_configure = hisi_sas_slave_configure,
|
||||||
.scan_finished = hisi_sas_scan_finished,
|
.scan_finished = hisi_sas_scan_finished,
|
||||||
|
|||||||
@@ -6731,6 +6731,7 @@ static struct scsi_host_template driver_template = {
|
|||||||
.compat_ioctl = ipr_ioctl,
|
.compat_ioctl = ipr_ioctl,
|
||||||
#endif
|
#endif
|
||||||
.queuecommand = ipr_queuecommand,
|
.queuecommand = ipr_queuecommand,
|
||||||
|
.dma_need_drain = ata_scsi_dma_need_drain,
|
||||||
.eh_abort_handler = ipr_eh_abort,
|
.eh_abort_handler = ipr_eh_abort,
|
||||||
.eh_device_reset_handler = ipr_eh_dev_reset,
|
.eh_device_reset_handler = ipr_eh_dev_reset,
|
||||||
.eh_host_reset_handler = ipr_eh_host_reset,
|
.eh_host_reset_handler = ipr_eh_host_reset,
|
||||||
|
|||||||
@@ -153,6 +153,7 @@ static struct scsi_host_template isci_sht = {
|
|||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.proc_name = DRV_NAME,
|
.proc_name = DRV_NAME,
|
||||||
.queuecommand = sas_queuecommand,
|
.queuecommand = sas_queuecommand,
|
||||||
|
.dma_need_drain = ata_scsi_dma_need_drain,
|
||||||
.target_alloc = sas_target_alloc,
|
.target_alloc = sas_target_alloc,
|
||||||
.slave_configure = sas_slave_configure,
|
.slave_configure = sas_slave_configure,
|
||||||
.scan_finished = isci_host_scan_finished,
|
.scan_finished = isci_host_scan_finished,
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ static struct scsi_host_template mvs_sht = {
|
|||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.queuecommand = sas_queuecommand,
|
.queuecommand = sas_queuecommand,
|
||||||
|
.dma_need_drain = ata_scsi_dma_need_drain,
|
||||||
.target_alloc = sas_target_alloc,
|
.target_alloc = sas_target_alloc,
|
||||||
.slave_configure = sas_slave_configure,
|
.slave_configure = sas_slave_configure,
|
||||||
.scan_finished = mvs_scan_finished,
|
.scan_finished = mvs_scan_finished,
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ static struct scsi_host_template pm8001_sht = {
|
|||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
.name = DRV_NAME,
|
.name = DRV_NAME,
|
||||||
.queuecommand = sas_queuecommand,
|
.queuecommand = sas_queuecommand,
|
||||||
|
.dma_need_drain = ata_scsi_dma_need_drain,
|
||||||
.target_alloc = sas_target_alloc,
|
.target_alloc = sas_target_alloc,
|
||||||
.slave_configure = sas_slave_configure,
|
.slave_configure = sas_slave_configure,
|
||||||
.scan_finished = pm8001_scan_finished,
|
.scan_finished = pm8001_scan_finished,
|
||||||
|
|||||||
@@ -106,8 +106,10 @@ static int ufs_bsg_request(struct bsg_job *job)
|
|||||||
desc_op = bsg_request->upiu_req.qr.opcode;
|
desc_op = bsg_request->upiu_req.qr.opcode;
|
||||||
ret = ufs_bsg_alloc_desc_buffer(hba, job, &desc_buff,
|
ret = ufs_bsg_alloc_desc_buffer(hba, job, &desc_buff,
|
||||||
&desc_len, desc_op);
|
&desc_len, desc_op);
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
pm_runtime_put_sync(hba->dev);
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case UPIU_TRANSACTION_NOP_OUT:
|
case UPIU_TRANSACTION_NOP_OUT:
|
||||||
|
|||||||
@@ -1095,7 +1095,11 @@ extern int ata_scsi_ioctl(struct scsi_device *dev, unsigned int cmd,
|
|||||||
#define ATA_SCSI_COMPAT_IOCTL /* empty */
|
#define ATA_SCSI_COMPAT_IOCTL /* empty */
|
||||||
#endif
|
#endif
|
||||||
extern int ata_scsi_queuecmd(struct Scsi_Host *h, struct scsi_cmnd *cmd);
|
extern int ata_scsi_queuecmd(struct Scsi_Host *h, struct scsi_cmnd *cmd);
|
||||||
|
#if IS_ENABLED(CONFIG_ATA)
|
||||||
bool ata_scsi_dma_need_drain(struct request *rq);
|
bool ata_scsi_dma_need_drain(struct request *rq);
|
||||||
|
#else
|
||||||
|
#define ata_scsi_dma_need_drain NULL
|
||||||
|
#endif
|
||||||
extern int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *dev,
|
extern int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *dev,
|
||||||
unsigned int cmd, void __user *arg);
|
unsigned int cmd, void __user *arg);
|
||||||
extern bool ata_link_online(struct ata_link *link);
|
extern bool ata_link_online(struct ata_link *link);
|
||||||
|
|||||||
Reference in New Issue
Block a user