Commit 64677779 authored by Linus Torvalds's avatar Linus Torvalds

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
parents a5c6a1f0 b8f1d1e0
...@@ -40,6 +40,7 @@ static struct scsi_host_template aic94xx_sht = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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) ...@@ -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, ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment