diff options
| author | Alan Stern <stern@rowland.harvard.edu> | 2010-02-26 11:49:39 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-03-02 17:55:07 -0500 |
| commit | 49d6271b85a3e18062eaf4d6f8d899abe00a7725 (patch) | |
| tree | 83b92caacf276bdd054a03320fd6f48cbe96c562 /drivers/usb/storage | |
| parent | efe7daf2231a6beb59f0f641461d19fa62fb83ab (diff) | |
usb-storage: use max_hw_sectors instead of max_sectors
This patch (as1347) makes some adjustments to the way usb-storage
handles the request-queue parameters.
USB host controllers are able to handle arbitrarily long
scatter-gather lists, since they are limited only by main memory and
not by the controller hardware. Hence the sg_tablesize field in the
host template can be increased to the maximum value.
Drivers like usb-storage aren't supposed to touch the queue's
max_sectors parameter; instead they are supposed to use the
max_hw_sectors value. Accordingly, the patch replaces calls of
queue_max_sectors() with calls of queue_max_hw_sectors(). Oddly
enough, the blk_queue_max_sectors() routine is nevertheless still
appropriate.
The existing code imposes a limit of SCSI_DEFAULT_MAX_SECTORS (1024)
on the values accepted by the max_sectors attribute file. There's no
reason not to accept larger values, so the limit is removed. (It
would be nice to change the file's name to max_hw_sectors, but the old
name is already a well-established API.)
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
CC: Matthew Dharm <mdharm-usb@one-eyed-alien.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/storage')
| -rw-r--r-- | drivers/usb/storage/scsiglue.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c index aadc16b5eed7..4cc035562cc2 100644 --- a/drivers/usb/storage/scsiglue.c +++ b/drivers/usb/storage/scsiglue.c | |||
| @@ -133,7 +133,7 @@ static int slave_configure(struct scsi_device *sdev) | |||
| 133 | 133 | ||
| 134 | if (us->fflags & US_FL_MAX_SECTORS_MIN) | 134 | if (us->fflags & US_FL_MAX_SECTORS_MIN) |
| 135 | max_sectors = PAGE_CACHE_SIZE >> 9; | 135 | max_sectors = PAGE_CACHE_SIZE >> 9; |
| 136 | if (queue_max_sectors(sdev->request_queue) > max_sectors) | 136 | if (queue_max_hw_sectors(sdev->request_queue) > max_sectors) |
| 137 | blk_queue_max_hw_sectors(sdev->request_queue, | 137 | blk_queue_max_hw_sectors(sdev->request_queue, |
| 138 | max_sectors); | 138 | max_sectors); |
| 139 | } else if (sdev->type == TYPE_TAPE) { | 139 | } else if (sdev->type == TYPE_TAPE) { |
| @@ -484,7 +484,7 @@ static ssize_t show_max_sectors(struct device *dev, struct device_attribute *att | |||
| 484 | { | 484 | { |
| 485 | struct scsi_device *sdev = to_scsi_device(dev); | 485 | struct scsi_device *sdev = to_scsi_device(dev); |
| 486 | 486 | ||
| 487 | return sprintf(buf, "%u\n", queue_max_sectors(sdev->request_queue)); | 487 | return sprintf(buf, "%u\n", queue_max_hw_sectors(sdev->request_queue)); |
| 488 | } | 488 | } |
| 489 | 489 | ||
| 490 | /* Input routine for the sysfs max_sectors file */ | 490 | /* Input routine for the sysfs max_sectors file */ |
| @@ -494,9 +494,9 @@ static ssize_t store_max_sectors(struct device *dev, struct device_attribute *at | |||
| 494 | struct scsi_device *sdev = to_scsi_device(dev); | 494 | struct scsi_device *sdev = to_scsi_device(dev); |
| 495 | unsigned short ms; | 495 | unsigned short ms; |
| 496 | 496 | ||
| 497 | if (sscanf(buf, "%hu", &ms) > 0 && ms <= SCSI_DEFAULT_MAX_SECTORS) { | 497 | if (sscanf(buf, "%hu", &ms) > 0) { |
| 498 | blk_queue_max_hw_sectors(sdev->request_queue, ms); | 498 | blk_queue_max_hw_sectors(sdev->request_queue, ms); |
| 499 | return strlen(buf); | 499 | return count; |
| 500 | } | 500 | } |
| 501 | return -EINVAL; | 501 | return -EINVAL; |
| 502 | } | 502 | } |
| @@ -539,7 +539,7 @@ struct scsi_host_template usb_stor_host_template = { | |||
| 539 | .slave_configure = slave_configure, | 539 | .slave_configure = slave_configure, |
| 540 | 540 | ||
| 541 | /* lots of sg segments can be handled */ | 541 | /* lots of sg segments can be handled */ |
| 542 | .sg_tablesize = SG_ALL, | 542 | .sg_tablesize = SCSI_MAX_SG_CHAIN_SEGMENTS, |
| 543 | 543 | ||
| 544 | /* limit the total size of a transfer to 120 KB */ | 544 | /* limit the total size of a transfer to 120 KB */ |
| 545 | .max_sectors = 240, | 545 | .max_sectors = 240, |
