[SCSI] megaraid_sas: Add .change_queue_depth support
adam radford [Tue, 26 Jul 2011 22:42:52 +0000 (15:42 -0700)]
Signed-off-by: Adam Radford <aradford@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>

drivers/scsi/megaraid/megaraid_sas_base.c

index 2d8cdce..c719220 100644 (file)
@@ -54,6 +54,7 @@
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
+#include <scsi/scsi_tcq.h>
 #include "megaraid_sas_fusion.h"
 #include "megaraid_sas.h"
 
@@ -2057,6 +2058,20 @@ megasas_service_aen(struct megasas_instance *instance, struct megasas_cmd *cmd)
        }
 }
 
+static int megasas_change_queue_depth(struct scsi_device *sdev,
+                                     int queue_depth, int reason)
+{
+       if (reason != SCSI_QDEPTH_DEFAULT)
+               return -EOPNOTSUPP;
+
+       if (queue_depth > sdev->host->can_queue)
+               queue_depth = sdev->host->can_queue;
+       scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev),
+                               queue_depth);
+
+       return queue_depth;
+}
+
 /*
  * Scsi host template for megaraid_sas driver
  */
@@ -2074,6 +2089,7 @@ static struct scsi_host_template megasas_template = {
        .eh_timed_out = megasas_reset_timer,
        .bios_param = megasas_bios_param,
        .use_clustering = ENABLE_CLUSTERING,
+       .change_queue_depth = megasas_change_queue_depth,
 };
 
 /**