Commit 0da0a8a0 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:
 "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: default avatarJames 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
parents 54c6247d be255335
...@@ -79,5 +79,5 @@ config SCSI_MPT2SAS ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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)) {
......
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