]> git.hungrycats.org Git - linux/commitdiff
[PATCH] USB Storage: Sysfs attribute file for max_sectors
authorMatthew Dharm <mdharm-usb@one-eyed-alien.net>
Tue, 20 Jan 2004 08:03:17 +0000 (00:03 -0800)
committerGreg Kroah-Hartman <greg@kroah.com>
Tue, 20 Jan 2004 08:03:17 +0000 (00:03 -0800)
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).

drivers/usb/storage/scsiglue.c

index 72ec6987010290ad1feb5e4538bbf194344c5775..10d012e386ce365bbe9f0519ece27e0b42d19565 100644 (file)
@@ -52,6 +52,7 @@
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <scsi/scsi_devinfo.h>
+#include <scsi/scsi_host.h>
 
 
 /***********************************************************************
@@ -346,8 +347,34 @@ static ssize_t show_info(struct device *dev, char *buffer)
 
 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,
                };