Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5c9cfeddbb49954b459fda91bf5479f5a0a4e409
Commit:     5c9cfeddbb49954b459fda91bf5479f5a0a4e409
Parent:     32fbac2256cedee62de5602b1703c15c150a6e14
Author:     Salyzyn, Mark <[EMAIL PROTECTED]>
AuthorDate: Wed May 30 10:01:14 2007 -0400
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Fri Jun 1 11:39:56 2007 -0400

    [SCSI] aacraid: Changeable queue depth
    
    Inspired by Brian King's patch to the ibmvscsi driver. Adds support for
    a changeable queue depth to the aacraid driver.
    
    Signed-off-by: Mark Salyzyn <[EMAIL PROTECTED]>
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/aacraid/linit.c |   38 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index a270a3f..6f92d07 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -446,6 +446,43 @@ static int aac_slave_configure(struct scsi_device *sdev)
        return 0;
 }
 
+/**
+ *     aac_change_queue_depth          -       alter queue depths
+ *     @sdev:  SCSI device we are considering
+ *     @depth: desired queue depth
+ *
+ *     Alters queue depths for target device based on the host adapter's
+ *     total capacity and the queue depth supported by the target device.
+ */
+
+static int aac_change_queue_depth(struct scsi_device *sdev, int depth)
+{
+       if (sdev->tagged_supported && (sdev->type == TYPE_DISK) &&
+           (sdev_channel(sdev) == CONTAINER_CHANNEL)) {
+               struct scsi_device * dev;
+               struct Scsi_Host *host = sdev->host;
+               unsigned num = 0;
+
+               __shost_for_each_device(dev, host) {
+                       if (dev->tagged_supported && (dev->type == TYPE_DISK) &&
+                           (sdev_channel(dev) == CONTAINER_CHANNEL))
+                               ++num;
+                       ++num;
+               }
+               if (num >= host->can_queue)
+                       num = host->can_queue - 1;
+               if (depth > (host->can_queue - num))
+                       depth = host->can_queue - num;
+               if (depth > 256)
+                       depth = 256;
+               else if (depth < 2)
+                       depth = 2;
+               scsi_adjust_queue_depth(sdev, MSG_ORDERED_TAG, depth);
+       } else
+               scsi_adjust_queue_depth(sdev, 0, 1);
+       return sdev->queue_depth;
+}
+
 static int aac_ioctl(struct scsi_device *sdev, int cmd, void __user * arg)
 {
        struct aac_dev *dev = (struct aac_dev *)sdev->host->hostdata;
@@ -844,6 +881,7 @@ static struct scsi_host_template aac_driver_template = {
        .bios_param                     = aac_biosparm, 
        .shost_attrs                    = aac_attrs,
        .slave_configure                = aac_slave_configure,
+       .change_queue_depth             = aac_change_queue_depth,
        .eh_abort_handler               = aac_eh_abort,
        .eh_host_reset_handler          = aac_eh_reset,
        .can_queue                      = AAC_NUM_IO_FIB,       
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to