SCSI fixes on 20210116
Nine minor fixes, 7 in drivers and 2 in the core SCSI disk driver (sd) which should be harmless involving removing an unused variable and quietening a spurious warning. Signed-off-by: James E.J. Bottomley <jejb@linux.ibm.com> -----BEGIN PGP SIGNATURE----- iJwEABMIAEQWIQTnYEDbdso9F2cI+arnQslM7pishQUCYANKJiYcamFtZXMuYm90 dG9tbGV5QGhhbnNlbnBhcnRuZXJzaGlwLmNvbQAKCRDnQslM7pishVSyAP9a4xdK 9A4seh2/LW3GwPsoQUJQINe4yok/lGVXSQk3XQD/QkkYbzeqVGN4BHK1LQX2R9Sw wy+E4ENjdOY+9p+KMxo= =m0jh -----END PGP SIGNATURE----- Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi Pull SCSI fixes from James Bottomley: "Nine minor fixes, seven in drivers and two in the core SCSI disk driver (sd) which should be harmless involving removing an unused variable and quietening a spurious warning" Signed-off-by: James E.J. Bottomley <jejb@linux.ibm.com> * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: sd: Remove obsolete variable in sd_remove() scsi: sd: Suppress spurious errors when WRITE SAME is being disabled scsi: scsi_debug: Fix memleak in scsi_debug_init() scsi: mpt3sas: Fix spelling mistake in Kconfig "compatiblity" -> "compatibility" scsi: qedi: Correct max length of CHAP secret scsi: ufs: Correct the LUN used in eh_device_reset_handler() callback scsi: ufs: Relocate flush of exceptional event scsi: ufs: Relax the condition of UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL scsi: ufs: Fix possible power drain during system suspend
This commit is contained in:
commit
0da0a8a0a0
|
@ -79,5 +79,5 @@ config SCSI_MPT2SAS
|
||||||
select SCSI_MPT3SAS
|
select SCSI_MPT3SAS
|
||||||
depends on PCI && SCSI
|
depends on PCI && SCSI
|
||||||
help
|
help
|
||||||
Dummy config option for backwards compatiblity: configure the MPT3SAS
|
Dummy config option for backwards compatibility: configure the MPT3SAS
|
||||||
driver instead.
|
driver instead.
|
||||||
|
|
|
@ -2245,7 +2245,7 @@ qedi_show_boot_tgt_info(struct qedi_ctx *qedi, int type,
|
||||||
chap_name);
|
chap_name);
|
||||||
break;
|
break;
|
||||||
case ISCSI_BOOT_TGT_CHAP_SECRET:
|
case ISCSI_BOOT_TGT_CHAP_SECRET:
|
||||||
rc = sprintf(buf, "%.*s\n", NVM_ISCSI_CFG_CHAP_NAME_MAX_LEN,
|
rc = sprintf(buf, "%.*s\n", NVM_ISCSI_CFG_CHAP_PWD_MAX_LEN,
|
||||||
chap_secret);
|
chap_secret);
|
||||||
break;
|
break;
|
||||||
case ISCSI_BOOT_TGT_REV_CHAP_NAME:
|
case ISCSI_BOOT_TGT_REV_CHAP_NAME:
|
||||||
|
@ -2253,7 +2253,7 @@ qedi_show_boot_tgt_info(struct qedi_ctx *qedi, int type,
|
||||||
mchap_name);
|
mchap_name);
|
||||||
break;
|
break;
|
||||||
case ISCSI_BOOT_TGT_REV_CHAP_SECRET:
|
case ISCSI_BOOT_TGT_REV_CHAP_SECRET:
|
||||||
rc = sprintf(buf, "%.*s\n", NVM_ISCSI_CFG_CHAP_NAME_MAX_LEN,
|
rc = sprintf(buf, "%.*s\n", NVM_ISCSI_CFG_CHAP_PWD_MAX_LEN,
|
||||||
mchap_secret);
|
mchap_secret);
|
||||||
break;
|
break;
|
||||||
case ISCSI_BOOT_TGT_FLAGS:
|
case ISCSI_BOOT_TGT_FLAGS:
|
||||||
|
|
|
@ -6740,7 +6740,7 @@ static int __init scsi_debug_init(void)
|
||||||
k = sdeb_zbc_model_str(sdeb_zbc_model_s);
|
k = sdeb_zbc_model_str(sdeb_zbc_model_s);
|
||||||
if (k < 0) {
|
if (k < 0) {
|
||||||
ret = k;
|
ret = k;
|
||||||
goto free_vm;
|
goto free_q_arr;
|
||||||
}
|
}
|
||||||
sdeb_zbc_model = k;
|
sdeb_zbc_model = k;
|
||||||
switch (sdeb_zbc_model) {
|
switch (sdeb_zbc_model) {
|
||||||
|
@ -6753,7 +6753,8 @@ static int __init scsi_debug_init(void)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pr_err("Invalid ZBC model\n");
|
pr_err("Invalid ZBC model\n");
|
||||||
return -EINVAL;
|
ret = -EINVAL;
|
||||||
|
goto free_q_arr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sdeb_zbc_model != BLK_ZONED_NONE) {
|
if (sdeb_zbc_model != BLK_ZONED_NONE) {
|
||||||
|
|
|
@ -984,8 +984,10 @@ static blk_status_t sd_setup_write_zeroes_cmnd(struct scsi_cmnd *cmd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sdp->no_write_same)
|
if (sdp->no_write_same) {
|
||||||
|
rq->rq_flags |= RQF_QUIET;
|
||||||
return BLK_STS_TARGET;
|
return BLK_STS_TARGET;
|
||||||
|
}
|
||||||
|
|
||||||
if (sdkp->ws16 || lba > 0xffffffff || nr_blocks > 0xffff)
|
if (sdkp->ws16 || lba > 0xffffffff || nr_blocks > 0xffff)
|
||||||
return sd_setup_write_same16_cmnd(cmd, false);
|
return sd_setup_write_same16_cmnd(cmd, false);
|
||||||
|
@ -3510,10 +3512,8 @@ static int sd_probe(struct device *dev)
|
||||||
static int sd_remove(struct device *dev)
|
static int sd_remove(struct device *dev)
|
||||||
{
|
{
|
||||||
struct scsi_disk *sdkp;
|
struct scsi_disk *sdkp;
|
||||||
dev_t devt;
|
|
||||||
|
|
||||||
sdkp = dev_get_drvdata(dev);
|
sdkp = dev_get_drvdata(dev);
|
||||||
devt = disk_devt(sdkp->disk);
|
|
||||||
scsi_autopm_get_device(sdkp->device);
|
scsi_autopm_get_device(sdkp->device);
|
||||||
|
|
||||||
async_synchronize_full_domain(&scsi_sd_pm_domain);
|
async_synchronize_full_domain(&scsi_sd_pm_domain);
|
||||||
|
|
|
@ -289,7 +289,8 @@ static inline void ufshcd_wb_config(struct ufs_hba *hba)
|
||||||
if (ret)
|
if (ret)
|
||||||
dev_err(hba->dev, "%s: En WB flush during H8: failed: %d\n",
|
dev_err(hba->dev, "%s: En WB flush during H8: failed: %d\n",
|
||||||
__func__, ret);
|
__func__, ret);
|
||||||
ufshcd_wb_toggle_flush(hba, true);
|
if (!(hba->quirks & UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL))
|
||||||
|
ufshcd_wb_toggle_flush(hba, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ufshcd_scsi_unblock_requests(struct ufs_hba *hba)
|
static void ufshcd_scsi_unblock_requests(struct ufs_hba *hba)
|
||||||
|
@ -5436,9 +5437,6 @@ static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set)
|
||||||
|
|
||||||
static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable)
|
static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable)
|
||||||
{
|
{
|
||||||
if (hba->quirks & UFSHCI_QUIRK_SKIP_MANUAL_WB_FLUSH_CTRL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
ufshcd_wb_buf_flush_enable(hba);
|
ufshcd_wb_buf_flush_enable(hba);
|
||||||
else
|
else
|
||||||
|
@ -6661,19 +6659,16 @@ static int ufshcd_eh_device_reset_handler(struct scsi_cmnd *cmd)
|
||||||
{
|
{
|
||||||
struct Scsi_Host *host;
|
struct Scsi_Host *host;
|
||||||
struct ufs_hba *hba;
|
struct ufs_hba *hba;
|
||||||
unsigned int tag;
|
|
||||||
u32 pos;
|
u32 pos;
|
||||||
int err;
|
int err;
|
||||||
u8 resp = 0xF;
|
u8 resp = 0xF, lun;
|
||||||
struct ufshcd_lrb *lrbp;
|
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
host = cmd->device->host;
|
host = cmd->device->host;
|
||||||
hba = shost_priv(host);
|
hba = shost_priv(host);
|
||||||
tag = cmd->request->tag;
|
|
||||||
|
|
||||||
lrbp = &hba->lrb[tag];
|
lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun);
|
||||||
err = ufshcd_issue_tm_cmd(hba, lrbp->lun, 0, UFS_LOGICAL_RESET, &resp);
|
err = ufshcd_issue_tm_cmd(hba, lun, 0, UFS_LOGICAL_RESET, &resp);
|
||||||
if (err || resp != UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
|
if (err || resp != UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
|
||||||
if (!err)
|
if (!err)
|
||||||
err = resp;
|
err = resp;
|
||||||
|
@ -6682,7 +6677,7 @@ static int ufshcd_eh_device_reset_handler(struct scsi_cmnd *cmd)
|
||||||
|
|
||||||
/* clear the commands that were pending for corresponding LUN */
|
/* clear the commands that were pending for corresponding LUN */
|
||||||
for_each_set_bit(pos, &hba->outstanding_reqs, hba->nutrs) {
|
for_each_set_bit(pos, &hba->outstanding_reqs, hba->nutrs) {
|
||||||
if (hba->lrb[pos].lun == lrbp->lun) {
|
if (hba->lrb[pos].lun == lun) {
|
||||||
err = ufshcd_clear_cmd(hba, pos);
|
err = ufshcd_clear_cmd(hba, pos);
|
||||||
if (err)
|
if (err)
|
||||||
break;
|
break;
|
||||||
|
@ -8698,6 +8693,8 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
|
||||||
ufshcd_wb_need_flush(hba));
|
ufshcd_wb_need_flush(hba));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flush_work(&hba->eeh_work);
|
||||||
|
|
||||||
if (req_dev_pwr_mode != hba->curr_dev_pwr_mode) {
|
if (req_dev_pwr_mode != hba->curr_dev_pwr_mode) {
|
||||||
if (!ufshcd_is_runtime_pm(pm_op))
|
if (!ufshcd_is_runtime_pm(pm_op))
|
||||||
/* ensure that bkops is disabled */
|
/* ensure that bkops is disabled */
|
||||||
|
@ -8710,8 +8707,6 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
flush_work(&hba->eeh_work);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In the case of DeepSleep, the device is expected to remain powered
|
* In the case of DeepSleep, the device is expected to remain powered
|
||||||
* with the link off, so do not check for bkops.
|
* with the link off, so do not check for bkops.
|
||||||
|
@ -8938,7 +8933,8 @@ int ufshcd_system_suspend(struct ufs_hba *hba)
|
||||||
if ((ufs_get_pm_lvl_to_dev_pwr_mode(hba->spm_lvl) ==
|
if ((ufs_get_pm_lvl_to_dev_pwr_mode(hba->spm_lvl) ==
|
||||||
hba->curr_dev_pwr_mode) &&
|
hba->curr_dev_pwr_mode) &&
|
||||||
(ufs_get_pm_lvl_to_link_pwr_state(hba->spm_lvl) ==
|
(ufs_get_pm_lvl_to_link_pwr_state(hba->spm_lvl) ==
|
||||||
hba->uic_link_state))
|
hba->uic_link_state) &&
|
||||||
|
!hba->dev_info.b_rpm_dev_flush_capable)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (pm_runtime_suspended(hba->dev)) {
|
if (pm_runtime_suspended(hba->dev)) {
|
||||||
|
|
Loading…
Reference in New Issue