This message is copied the from usb-storage development list for wider
exposure and testing. I would appreciate getting bug reports from anyone
who has a USB mass storage device and for whom this patch doesn't work.
Alan Stern
-------------------------------------------------------------------------
Matt:
Now that Patrick Mansfield's 192-byte MODE SENSE change has filtered down
to Greg's development kernel, I want to submit this patch. It does
several things, all of which make usb-storage behave more like Windows:
For disk-type devices, allow MODE SENSE with page=x3f for
determining write-enable status. (Note however that the
sd driver only does this for devices with removable media.
I don't understand why; surely fixed-media devices can also
be write-protected.) Page=x08 is still forbidden.
For disk-type devices use MODE SENSE(6) if the protocol is
Transparent SCSI. For all other devices and other protocols
use MODE SENSE(10).
For disk-type devices make MODE SENSE use 192-byte transfer
length. Other device types can use arbitrary lengths.
(Actually sd.c only interprets this flag for MODE SENSE with
page=x3f; we may need to change that if we add support for
page=x08.)
This works okay with my devices, but that's a very limited sample. We
should try to make sure that allowing page x3f won't cause problems with
more than a handful of aberrant devices -- if necessary they can be added
to a SCSI blacklist or unusual_devs.h.
It sure will be nice to be able to detect write-protected devices!
Alan Stern
===== drivers/usb/storage/scsiglue.c 1.73 vs edited =====
--- 1.73/drivers/usb/storage/scsiglue.c Wed Apr 14 13:12:47 2004
+++ edited/drivers/usb/storage/scsiglue.c Mon Apr 26 11:50:21 2004
@@ -48,6 +48,7 @@
#include "usb.h"
#include "debug.h"
#include "transport.h"
+#include "protocol.h"
#include <linux/slab.h>
#include <linux/module.h>
@@ -70,8 +71,17 @@
* Set default bflags. These can be overridden for individual
* models and vendors via the scsi devinfo mechanism.
*/
- sdev->sdev_bflags = (BLIST_MS_SKIP_PAGE_08 | BLIST_MS_SKIP_PAGE_3F |
- BLIST_USE_10_BYTE_MS);
+
+ /* By default, USB mass storage devices use MODE SENSE(10).
+ * By default, use 192 byte transfers for MODE SENSE with page=x3f.
+ * We don't know how reliable MODE SENSE page x08 is, so for
+ * now skip it by default.
+ sdev->sdev_bflags = (BLIST_USE_10_BYTE_MS |
+ BLIST_MS_192_BYTES_FOR_3F |
+ BLIST_MS_SKIP_PAGE_08);
+ /* Maybe add an unusual_devs flag for BLIST_MS_SKIP_PAGE_3F if
+ * too many devices fail to support it. */
+
return 0;
}
@@ -99,7 +109,24 @@
us->pusb_dev->speed == USB_SPEED_HIGH)
blk_queue_max_sectors(sdev->request_queue, 128);
- /* this is to satisify the compiler, tho I don't think the
+ /* We can't put these settings in slave_alloc() because that gets
+ * called before the device type is known. Consequently these
+ * settings can't be overridden via the scsi devinfo mechanism. */
+ if (sdev->type == TYPE_DISK) {
+
+ /* Disk-type devices use MODE SENSE(6) if the protocol
+ * (SubClass) is Transparent SCSI */
+ if (us->subclass == US_SC_SCSI)
+ sdev->use_10_for_ms = 0;
+ } else {
+
+ /* Non-disk-type devices don't need to blacklist page x08
+ * or to force 192 byte transfer lengths for MODE SENSE. */
+ sdev->skip_ms_page_8 = 0;
+ sdev->use_192_bytes_for_3f = 0;
+ }
+
+ /* this is to satisfy the compiler, tho I don't think the
* return code is ever checked anywhere. */
return 0;
}
_______________________________________________
Usb-storage mailing list
[EMAIL PROTECTED]
https://lists.one-eyed-alien.net/mailman/listinfo/usb-storage
-------------------------------------------------------
This SF.net email is sponsored by: The Robotic Monkeys at ThinkGeek
For a limited time only, get FREE Ground shipping on all orders of $35
or more. Hurry up and shop folks, this offer expires April 30th!
http://www.thinkgeek.com/freeshipping/?cpg=12297
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel