SCSI & usb-storage: add flags for VPD pages and REPORT LUNS
This patch (as1507) adds a skip_vpd_pages flag to struct scsi_device and a no_report_luns flag to struct scsi_target. The first is used to control whether sd will look at VPD pages for information on block provisioning, limits, and characteristics. The second prevents scsi_report_lun_scan() from issuing a REPORT LUNS command. The patch also modifies usb-storage to set the new flag bits for all USB devices and targets, and to stop adjusting the scsi_level value. Historically we have seen that USB mass-storage devices often don't support VPD pages or REPORT LUNS properly. Until now we have avoided these things by setting the scsi_level to SCSI_2 for all USB devices. But this has the side effect of storing the LUN bits into the second byte of each CDB, and now we have a report of a device which doesn't like that. The best solution is to stop abusing scsi_level and instead have separate flags for VPD pages and REPORT LUNS. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Reported-by: Perry Wagle <wagle@mac.com> CC: Matthew Dharm <mdharm-usb@one-eyed-alien.net> Cc: James Bottomley <James.Bottomley@HansenPartnership.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
de8c46bfc0
commit
09b6b51b0b
4 changed files with 24 additions and 11 deletions
|
@ -136,6 +136,7 @@ struct scsi_device {
|
|||
unsigned use_10_for_ms:1; /* first try 10-byte mode sense/select */
|
||||
unsigned skip_ms_page_8:1; /* do not use MODE SENSE page 0x08 */
|
||||
unsigned skip_ms_page_3f:1; /* do not use MODE SENSE page 0x3f */
|
||||
unsigned skip_vpd_pages:1; /* do not read VPD pages */
|
||||
unsigned use_192_bytes_for_3f:1; /* ask for 192 bytes from page 0x3f */
|
||||
unsigned no_start_on_add:1; /* do not issue start on add */
|
||||
unsigned allow_restart:1; /* issue START_UNIT in error handler */
|
||||
|
@ -248,6 +249,8 @@ struct scsi_target {
|
|||
* for the device at a time. */
|
||||
unsigned int pdt_1f_for_no_lun:1; /* PDT = 0x1f
|
||||
* means no lun present. */
|
||||
unsigned int no_report_luns:1; /* Don't use
|
||||
* REPORT LUNS for scanning. */
|
||||
/* commands actually active on LLD. protected by host lock. */
|
||||
unsigned int target_busy;
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue