diff options
Diffstat (limited to 'drivers/scsi/scsi.c')
| -rw-r--r-- | drivers/scsi/scsi.c | 13 | 
1 files changed, 13 insertions, 0 deletions
| diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index 24619c3bebd5..e9e2f0e15ac8 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c @@ -214,6 +214,15 @@ void scsi_finish_command(struct scsi_cmnd *cmd)  	scsi_io_completion(cmd, good_bytes);  } + +/* + * 1024 is big enough for saturating the fast scsi LUN now + */ +int scsi_device_max_queue_depth(struct scsi_device *sdev) +{ +	return max_t(int, sdev->host->can_queue, 1024); +} +  /**   * scsi_change_queue_depth - change a device's queue depth   * @sdev: SCSI Device in question @@ -223,6 +232,8 @@ void scsi_finish_command(struct scsi_cmnd *cmd)   */  int scsi_change_queue_depth(struct scsi_device *sdev, int depth)  { +	depth = min_t(int, depth, scsi_device_max_queue_depth(sdev)); +  	if (depth > 0) {  		sdev->queue_depth = depth;  		wmb(); @@ -231,6 +242,8 @@ int scsi_change_queue_depth(struct scsi_device *sdev, int depth)  	if (sdev->request_queue)  		blk_set_queue_depth(sdev->request_queue, depth); +	sbitmap_resize(&sdev->budget_map, sdev->queue_depth); +  	return sdev->queue_depth;  }  EXPORT_SYMBOL(scsi_change_queue_depth); | 
