Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b18268fc631034882f5f3dd93daa248a3bfdd085
Commit:     b18268fc631034882f5f3dd93daa248a3bfdd085
Parent:     b6ef70f33ca2a3084b4fea12414550724a9114dc
Author:     Salyzyn, Mark <[EMAIL PROTECTED]>
AuthorDate: Tue Jan 8 14:07:57 2008 -0800
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Wed Jan 23 11:29:21 2008 -0600

    [SCSI] aacraid: improve queue balancing
    
    The adapter queue is divided up equally to all the arrays to prevent
    command starvation to any individual array. On the other hand,
    physical targets are only granted a queue depth of one each. The code
    prior to this patch used to deal with the incremental discovery of
    targets, but the driver knows how many arrays are present prior to the
    scan so this knowledge is used to generate a better estimate for the
    queue depth.
    
    Remove the capability of 'physical=0' from preventing access to the
    class of adapters that have the RAID/SCSI mode of operation since none
    of the physicals on the SCSI channel are candidates ever for an array.
    
    As always, the user can override this default queue depth policy by
    making the appropriate adjustments utilizing sysfs.
    
    Signed-off-by: Mark Salyzyn <[EMAIL PROTECTED]>
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/aacraid/linit.c |   23 +++++++++++++----------
 1 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 6a553ea..0523cc6 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -401,16 +401,14 @@ static int aac_biosparm(struct scsi_device *sdev, struct 
block_device *bdev,
 
 static int aac_slave_configure(struct scsi_device *sdev)
 {
+       struct aac_dev *aac = (struct aac_dev *)sdev->host->hostdata;
        if ((sdev->type == TYPE_DISK) &&
-                       (sdev_channel(sdev) != CONTAINER_CHANNEL)) {
+                       (sdev_channel(sdev) != CONTAINER_CHANNEL) &&
+                       (!aac->raid_scsi_mode || (sdev_channel(sdev) != 2))) {
                if (expose_physicals == 0)
                        return -ENXIO;
-               if (expose_physicals < 0) {
-                       struct aac_dev *aac =
-                               (struct aac_dev *)sdev->host->hostdata;
-                       if (!aac->raid_scsi_mode || (sdev_channel(sdev) != 2))
-                               sdev->no_uld_attach = 1;
-               }
+               if (expose_physicals < 0)
+                       sdev->no_uld_attach = 1;
        }
        if (sdev->tagged_supported && (sdev->type == TYPE_DISK) &&
                        (sdev_channel(sdev) == CONTAINER_CHANNEL)) {
@@ -419,6 +417,7 @@ static int aac_slave_configure(struct scsi_device *sdev)
                unsigned num_lsu = 0;
                unsigned num_one = 0;
                unsigned depth;
+               unsigned cid;
 
                /*
                 * Firmware has an individual device recovery time typically
@@ -426,11 +425,15 @@ static int aac_slave_configure(struct scsi_device *sdev)
                 */
                if (sdev->timeout < (45 * HZ))
                        sdev->timeout = 45 * HZ;
+               for (cid = 0; cid < aac->maximum_num_containers; ++cid)
+                       if (aac->fsa_dev[cid].valid)
+                               ++num_lsu;
                __shost_for_each_device(dev, host) {
                        if (dev->tagged_supported && (dev->type == TYPE_DISK) &&
-                               (sdev_channel(dev) == CONTAINER_CHANNEL))
-                               ++num_lsu;
-                       else
+                               (sdev_channel(dev) == CONTAINER_CHANNEL)) {
+                               if (!aac->fsa_dev[sdev_id(dev)].valid)
+                                       ++num_lsu;
+                       } else
                                ++num_one;
                }
                if (num_lsu == 0)
-
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