After much discussion with the SCSI folks, here's a patch to export max_sectors as a sysfs attribute. Turning this down makes some people's devices more stable, but at a significant cost in performance. Now, users can adjust it without recompilation.
This is YAASP (yet another Alan Stern patch).
Greg, please apply.
Matt
--- 2.6/drivers/usb/storage/scsiglue.c.orig Thu Jan 15 16:41:10 2004
+++ 2.6/drivers/usb/storage/scsiglue.c Thu Jan 15 16:41:13 2004
@@ -52,6 +52,7 @@
#include <linux/slab.h>
#include <linux/module.h>
#include <scsi/scsi_devinfo.h>
+#include <scsi/scsi_host.h>
/***********************************************************************
@@ -321,8 +322,34 @@
static DEVICE_ATTR(info, S_IRUGO, show_info, NULL);
+/* Output routine for the sysfs max_sectors file */
+static ssize_t show_max_sectors(struct device *dev, char *buf)
+{
+ struct scsi_device *sdev = to_scsi_device(dev);
+
+ return sprintf(buf, "%u\n", sdev->request_queue->max_sectors);
+}
+
+/* Input routine for the sysfs max_sectors file */
+static ssize_t store_max_sectors(struct device *dev, const char *buf,
+ size_t count)
+{
+ struct scsi_device *sdev = to_scsi_device(dev);
+ unsigned short ms;
+
+ if (sscanf(buf, "%hu", &ms) > 0 && ms <= SCSI_DEFAULT_MAX_SECTORS) {
+ blk_queue_max_sectors(sdev->request_queue, ms);
+ return strlen(buf);
+ }
+ return -EINVAL;
+}
+
+static DEVICE_ATTR(max_sectors, S_IRUGO | S_IWUSR, show_max_sectors,
+ store_max_sectors);
+
static struct device_attribute *sysfs_device_attr_list[] = {
&dev_attr_info,
+ &dev_attr_max_sectors,
NULL,
};
--
Matthew Dharm Home: [EMAIL PROTECTED]
Maintainer, Linux USB Mass Storage Driver
C: They kicked your ass, didn't they?
S: They were cheating!
-- The Chief and Stef
User Friendly, 11/19/1997
pgp00000.pgp
Description: PGP signature
