Revert "scsi: sd: usb_storage: uas: Access media prior to querying device properties"
This reverts commit b73dd5f9997279715cd450ee8ca599aaff2eabb9 which is commit 321da3dc1f3c92a12e3c5da934090d2992a8814c upstream. It is known to cause problems and has asked to be dropped. Link: https://lore.kernel.org/r/yq1frvvpymp.fsf@ca-mkp.ca.oracle.com Cc: Tasos Sahanidis <tasos@tasossah.com> Cc: Ewan D. Milne <emilne@redhat.com> Cc: Bart Van Assche <bvanassche@acm.org> Cc: Tasos Sahanidis <tasos@tasossah.com> Cc: Martin K. Petersen <martin.petersen@oracle.com> Cc: James Bottomley <jejb@linux.ibm.com> Cc: Sasha Levin <sashal@kernel.org> Reported-by: John David Anglin <dave.anglin@bell.net> Reported-by: Cyril Brulebois <kibi@debian.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
cf0650adb6
commit
f1465ff4c8
@ -3286,24 +3286,6 @@ static bool sd_validate_opt_xfer_size(struct scsi_disk *sdkp,
|
||||
return true;
|
||||
}
|
||||
|
||||
static void sd_read_block_zero(struct scsi_disk *sdkp)
|
||||
{
|
||||
unsigned int buf_len = sdkp->device->sector_size;
|
||||
char *buffer, cmd[10] = { };
|
||||
|
||||
buffer = kmalloc(buf_len, GFP_KERNEL);
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
cmd[0] = READ_10;
|
||||
put_unaligned_be32(0, &cmd[2]); /* Logical block address 0 */
|
||||
put_unaligned_be16(1, &cmd[7]); /* Transfer 1 logical block */
|
||||
|
||||
scsi_execute_cmd(sdkp->device, cmd, REQ_OP_DRV_IN, buffer, buf_len,
|
||||
SD_TIMEOUT, sdkp->max_retries, NULL);
|
||||
kfree(buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* sd_revalidate_disk - called the first time a new disk is seen,
|
||||
* performs disk spin up, read_capacity, etc.
|
||||
@ -3343,13 +3325,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
|
||||
*/
|
||||
if (sdkp->media_present) {
|
||||
sd_read_capacity(sdkp, buffer);
|
||||
/*
|
||||
* Some USB/UAS devices return generic values for mode pages
|
||||
* until the media has been accessed. Trigger a READ operation
|
||||
* to force the device to populate mode pages.
|
||||
*/
|
||||
if (sdp->read_before_ms)
|
||||
sd_read_block_zero(sdkp);
|
||||
|
||||
/*
|
||||
* set the default to rotational. All non-rotational devices
|
||||
* support the block characteristics VPD page, which will
|
||||
|
@ -179,13 +179,6 @@ static int slave_configure(struct scsi_device *sdev)
|
||||
*/
|
||||
sdev->use_192_bytes_for_3f = 1;
|
||||
|
||||
/*
|
||||
* Some devices report generic values until the media has been
|
||||
* accessed. Force a READ(10) prior to querying device
|
||||
* characteristics.
|
||||
*/
|
||||
sdev->read_before_ms = 1;
|
||||
|
||||
/*
|
||||
* Some devices don't like MODE SENSE with page=0x3f,
|
||||
* which is the command used for checking if a device
|
||||
|
@ -876,13 +876,6 @@ static int uas_slave_configure(struct scsi_device *sdev)
|
||||
if (devinfo->flags & US_FL_CAPACITY_HEURISTICS)
|
||||
sdev->guess_capacity = 1;
|
||||
|
||||
/*
|
||||
* Some devices report generic values until the media has been
|
||||
* accessed. Force a READ(10) prior to querying device
|
||||
* characteristics.
|
||||
*/
|
||||
sdev->read_before_ms = 1;
|
||||
|
||||
/*
|
||||
* Some devices don't like MODE SENSE with page=0x3f,
|
||||
* which is the command used for checking if a device
|
||||
|
@ -204,7 +204,6 @@ struct scsi_device {
|
||||
unsigned use_10_for_rw:1; /* first try 10-byte read / write */
|
||||
unsigned use_10_for_ms:1; /* first try 10-byte mode sense/select */
|
||||
unsigned set_dbd_for_ms:1; /* Set "DBD" field in mode sense */
|
||||
unsigned read_before_ms:1; /* perform a READ before MODE SENSE */
|
||||
unsigned no_report_opcodes:1; /* no REPORT SUPPORTED OPERATION CODES */
|
||||
unsigned no_write_same:1; /* no WRITE SAME command */
|
||||
unsigned use_16_for_rw:1; /* Use read/write(16) over read/write(10) */
|
||||
|
Loading…
x
Reference in New Issue
Block a user