mirror of
https://github.com/torvalds/linux
synced 2024-10-02 17:30:32 +00:00
SCSI fixes on 20240621
Two fixes: one in the ufs driver fixing an obvious memory leak and the other (with a core flag based update) trying to prevent USB crashes by stopping the core from issuing a request for the I/O Hints mode page. Signed-off-by: James E.J. Bottomley <James.Bottomley@HansenPartnership.com> -----BEGIN PGP SIGNATURE----- iJwEABMIAEQWIQTnYEDbdso9F2cI+arnQslM7pishQUCZnXk0iYcamFtZXMuYm90 dG9tbGV5QGhhbnNlbnBhcnRuZXJzaGlwLmNvbQAKCRDnQslM7pishXORAQCgNcf9 vxSCOJNDU+OJlBOZLAzylHJEAYRnK7MPNg7ucgD/b8D4ANGbbHz4gLIdC/1BPFwi ZWmQwuClTmBJfCs6jSA= =07Uv -----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: "Two fixes: one in the ufs driver fixing an obvious memory leak and the other (with a core flag based update) trying to prevent USB crashes by stopping the core from issuing a request for the I/O Hints mode page" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: usb: uas: Do not query the IO Advice Hints Grouping mode page for USB/UAS devices scsi: core: Introduce the BLIST_SKIP_IO_HINTS flag scsi: ufs: core: Free memory allocated for model before reinit
This commit is contained in:
commit
35bb670d65
|
@ -63,6 +63,7 @@
|
||||||
#include <scsi/scsi_cmnd.h>
|
#include <scsi/scsi_cmnd.h>
|
||||||
#include <scsi/scsi_dbg.h>
|
#include <scsi/scsi_dbg.h>
|
||||||
#include <scsi/scsi_device.h>
|
#include <scsi/scsi_device.h>
|
||||||
|
#include <scsi/scsi_devinfo.h>
|
||||||
#include <scsi/scsi_driver.h>
|
#include <scsi/scsi_driver.h>
|
||||||
#include <scsi/scsi_eh.h>
|
#include <scsi/scsi_eh.h>
|
||||||
#include <scsi/scsi_host.h>
|
#include <scsi/scsi_host.h>
|
||||||
|
@ -3118,6 +3119,9 @@ static void sd_read_io_hints(struct scsi_disk *sdkp, unsigned char *buffer)
|
||||||
struct scsi_mode_data data;
|
struct scsi_mode_data data;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
if (sdp->sdev_bflags & BLIST_SKIP_IO_HINTS)
|
||||||
|
return;
|
||||||
|
|
||||||
res = scsi_mode_sense(sdp, /*dbd=*/0x8, /*modepage=*/0x0a,
|
res = scsi_mode_sense(sdp, /*dbd=*/0x8, /*modepage=*/0x0a,
|
||||||
/*subpage=*/0x05, buffer, SD_BUF_SIZE, SD_TIMEOUT,
|
/*subpage=*/0x05, buffer, SD_BUF_SIZE, SD_TIMEOUT,
|
||||||
sdkp->max_retries, &data, &sshdr);
|
sdkp->max_retries, &data, &sshdr);
|
||||||
|
|
|
@ -8787,6 +8787,7 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool init_dev_params)
|
||||||
(hba->quirks & UFSHCD_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH)) {
|
(hba->quirks & UFSHCD_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH)) {
|
||||||
/* Reset the device and controller before doing reinit */
|
/* Reset the device and controller before doing reinit */
|
||||||
ufshcd_device_reset(hba);
|
ufshcd_device_reset(hba);
|
||||||
|
ufs_put_device_desc(hba);
|
||||||
ufshcd_hba_stop(hba);
|
ufshcd_hba_stop(hba);
|
||||||
ufshcd_vops_reinit_notify(hba);
|
ufshcd_vops_reinit_notify(hba);
|
||||||
ret = ufshcd_hba_enable(hba);
|
ret = ufshcd_hba_enable(hba);
|
||||||
|
|
|
@ -79,6 +79,12 @@ static int slave_alloc (struct scsi_device *sdev)
|
||||||
if (us->protocol == USB_PR_BULK && us->max_lun > 0)
|
if (us->protocol == USB_PR_BULK && us->max_lun > 0)
|
||||||
sdev->sdev_bflags |= BLIST_FORCELUN;
|
sdev->sdev_bflags |= BLIST_FORCELUN;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some USB storage devices reset if the IO advice hints grouping mode
|
||||||
|
* page is queried. Hence skip that mode page.
|
||||||
|
*/
|
||||||
|
sdev->sdev_bflags |= BLIST_SKIP_IO_HINTS;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <scsi/scsi.h>
|
#include <scsi/scsi.h>
|
||||||
#include <scsi/scsi_eh.h>
|
#include <scsi/scsi_eh.h>
|
||||||
#include <scsi/scsi_dbg.h>
|
#include <scsi/scsi_dbg.h>
|
||||||
|
#include <scsi/scsi_devinfo.h>
|
||||||
#include <scsi/scsi_cmnd.h>
|
#include <scsi/scsi_cmnd.h>
|
||||||
#include <scsi/scsi_device.h>
|
#include <scsi/scsi_device.h>
|
||||||
#include <scsi/scsi_host.h>
|
#include <scsi/scsi_host.h>
|
||||||
|
@ -820,6 +821,12 @@ static int uas_slave_alloc(struct scsi_device *sdev)
|
||||||
struct uas_dev_info *devinfo =
|
struct uas_dev_info *devinfo =
|
||||||
(struct uas_dev_info *)sdev->host->hostdata;
|
(struct uas_dev_info *)sdev->host->hostdata;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some USB storage devices reset if the IO advice hints grouping mode
|
||||||
|
* page is queried. Hence skip that mode page.
|
||||||
|
*/
|
||||||
|
sdev->sdev_bflags |= BLIST_SKIP_IO_HINTS;
|
||||||
|
|
||||||
sdev->hostdata = devinfo;
|
sdev->hostdata = devinfo;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,8 +69,10 @@
|
||||||
#define BLIST_RETRY_ITF ((__force blist_flags_t)(1ULL << 32))
|
#define BLIST_RETRY_ITF ((__force blist_flags_t)(1ULL << 32))
|
||||||
/* Always retry ABORTED_COMMAND with ASC 0xc1 */
|
/* Always retry ABORTED_COMMAND with ASC 0xc1 */
|
||||||
#define BLIST_RETRY_ASC_C1 ((__force blist_flags_t)(1ULL << 33))
|
#define BLIST_RETRY_ASC_C1 ((__force blist_flags_t)(1ULL << 33))
|
||||||
|
/* Do not query the IO Advice Hints Grouping mode page */
|
||||||
|
#define BLIST_SKIP_IO_HINTS ((__force blist_flags_t)(1ULL << 34))
|
||||||
|
|
||||||
#define __BLIST_LAST_USED BLIST_RETRY_ASC_C1
|
#define __BLIST_LAST_USED BLIST_SKIP_IO_HINTS
|
||||||
|
|
||||||
#define __BLIST_HIGH_UNUSED (~(__BLIST_LAST_USED | \
|
#define __BLIST_HIGH_UNUSED (~(__BLIST_LAST_USED | \
|
||||||
(__force blist_flags_t) \
|
(__force blist_flags_t) \
|
||||||
|
|
Loading…
Reference in a new issue