IB/srp: add change_queue_depth and change_queue_type support
Subsystems (2)
PATCH v2 1/1 IB/srp: add change_queue_depth and change_queue_type support
Hi,
Below patch is new version which address comments from Bart.
Quoted 1 line
From
62d87b4d546066b251e44a3cb468b16783df7ee4Mon Sep 17 00:00:00 2001
From: Jack Wang <[email protected]>
Date: Mon, 26 Aug 2013 15:50:03 +0200
Subject: [PATCH] IB/srp: add change_queue_depth/change_queue_type support
Currently, it's not possible to change queue depth for device behind SRP host. Sometimes, we need to adjust queue_depth for performance reason(eg storage busy, we need lower queue_depth to avoid running into SCSI error handler), so this patch add support for SRP driver.
--- drivers/infiniband/ulp/srp/ib_srp.c | 54 +++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+)
(quoted diff) +0 -0
b/drivers/infiniband/ulp/srp/ib_srp.c
index 06a3e4b..2713e02 100644
drivers/infiniband/ulp/srp/ib_srp.c +1 -0
@@ -47,6 +47,7 @@#include <scsi/scsi.h> #include <scsi/scsi_device.h> #include <scsi/scsi_dbg.h> +#include <scsi/scsi_tcq.h> #include <scsi/srp.h> #include <scsi/scsi_transport_srp.h>
@@ -1875,6 +1876,57 @@ static int srp_cm_handler(struct ib_cm_id *cm_id,
struct ib_cm_event *event)
return 0;
}
+/**
+ * srp_change_queue_type - changing device queue tag type
+ * @sdev: scsi device struct
+ * @tag_type: requested tag type
+ *
+ * Returns queue tag type.
+ */
+static int
+srp_change_queue_type(struct scsi_device *sdev, int tag_type) +{
+ if (sdev->tagged_supported) {
+ scsi_set_tag_type(sdev, tag_type);
+ if (tag_type)
+ scsi_activate_tcq(sdev, sdev->queue_depth);
+ else
+ scsi_deactivate_tcq(sdev, sdev->queue_depth);
+ } else
+ tag_type = 0;
+
+ return tag_type;
+}
+
+/**
+ * srp_change_queue_depth - setting device queue depth
+ * @sdev: scsi device struct
+ * @qdepth: requested queue depth
+ * @reason: SCSI_QDEPTH_DEFAULT/SCSI_QDEPTH_QFULL/SCSI_QDEPTH_RAMP_UP
+ * (see include/scsi/scsi_host.h for definition)
+ *
+ * Returns queue depth.
+ */
+static int
+srp_change_queue_depth(struct scsi_device *sdev, int qdepth, int reason) +{
+ struct Scsi_Host *shost = sdev->host;
+ int max_depth;
+ if (reason == SCSI_QDEPTH_DEFAULT || reason == SCSI_QDEPTH_RAMP_UP) {
+ max_depth = shost->can_queue;
+ if (!sdev->tagged_supported)
+ max_depth = 1;
+ if (qdepth > max_depth)
+ qdepth = max_depth;
+ scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth);
+ } else if (reason == SCSI_QDEPTH_QFULL)
+ scsi_track_queue_full(sdev, qdepth);
+ else
+ return -EOPNOTSUPP;
+
+ return sdev->queue_depth;
+}
+
static int srp_send_tsk_mgmt(struct srp_target_port *target,
u64 req_tag, unsigned int lun, u8 func)
{
@@ -2260,6 +2312,8 @@ static struct scsi_host_template srp_template = {
.slave_configure = srp_slave_configure,
.info = srp_target_info,
.queuecommand = srp_queuecommand,
+ .change_queue_depth = srp_change_queue_depth,
+ .change_queue_type = srp_change_queue_type,
.eh_abort_handler = srp_abort,
.eh_device_reset_handler = srp_reset_device,
.eh_host_reset_handler = srp_reset_host,
Signature · 1 line
1.7.10.4
Quoted 1 line
From
e8d655fec4ac74a6af6a0b2471173c74e7c13f51Mon Sep 17 00:00:00 2001
From: Jack Wang <[email protected]>
Date: Mon, 26 Aug 2013 15:50:03 +0200
Subject: [PATCH] IB/srp: add change_queue_depth/change_queue_type support
Currently, it's not possible to change queue depth for device behind SRP host. Sometimes, we need to adjust queue_depth for performance reason(eg storage busy, we need lower queue_depth to avoid running into SCSI error handler), so this patch add support for SRP driver.
--- drivers/infiniband/ulp/srp/ib_srp.c | 54 +++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+)
drivers/infiniband/ulp/srp/ib_srp.c +54 -0
72 lines not on this page · raw message
Signature · 1 line
1.7.10.4
A message that is not in the archive (sent off-list or not yet received): [email protected]
Bart Van Assche
Tested-byQuoted 10 lines · Jack Wang
Hi,
Below patch is new version which address comments from Bart.
Quoted 1 line
From
62d87b4d546066b251e44a3cb468b16783df7ee4Mon Sep 17 00:00:00 2001From: Jack Wang <[email protected]>
Date: Mon, 26 Aug 2013 15:50:03 +0200
Subject: [PATCH] IB/srp: add change_queue_depth/change_queue_type support
Quoted 7 lines
Currently, it's not possible to change queue depth for device behind SRP host. Sometimes, we need to adjust
queue_depthfor performancereason(eg storage busy, we need lower queue_depth to avoid running into SCSI error handler), so this patch add support for SRP driver.Signed-off-by Jack Wang <[email protected]>
Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 4 lines · Jack Wang
Hi,
Below patch is new version which address comments from Bart.
Hi Roland,
Could you included this in your tree or do you need me resend it?
Best regards,
Jack
Quoted 92 lines
From
62d87b4d546066b251e44a3cb468b16783df7ee4Mon Sep 17 00:00:00 2001
From: Jack Wang <[email protected]>
Date: Mon, 26 Aug 2013 15:50:03 +0200
Subject: [PATCH] IB/srp: add change_queue_depth/change_queue_type supportCurrently, it's not possible to change queue depth for device behind SRP host. Sometimes, we need to adjust
queue_depthfor performancereason(eg storage busy, we need lower queue_depth to avoid running into SCSI error handler), so this patch add support for SRP driver.Signed-off-by Jack Wang <[email protected]>--- drivers/infiniband/ulp/srp/ib_srp.c | 54 +++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+)drivers/infiniband/ulp/srp/ib_srp.c +52
-0@@ -47,6 +47,7 @@#include <scsi/scsi.h> #include <scsi/scsi_device.h> #include <scsi/scsi_dbg.h> +#include <scsi/scsi_tcq.h> #include <scsi/srp.h> #include <scsi/scsi_transport_srp.h> @@ -1875,6 +1876,57 @@ static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event)return 0 ; } +/** +* srp_change_queue_type - changing device queue tag type +* @sdev: scsi device struct +* @tag_type: requested tag type +* +* Returns queue tag type. +*/ +static int +srp_change_queue_type (struct scsi_device *sdev,int tag_type) +{ +if (sdev->tagged_supported) { +scsi_set_tag_type (sdev, tag_type); +if (tag_type) +scsi_activate_tcq (sdev, sdev->queue_depth); +else +scsi_deactivate_tcq (sdev, sdev->queue_depth); + }else + tag_type =0 ; + +return tag_type; +} + +/** +* srp_change_queue_depth - setting device queue depth +* @sdev: scsi device struct +* @qdepth: requested queue depth +* @reason: SCSI_QDEPTH_DEFAULT/SCSI_QDEPTH_QFULL/SCSI_QDEPTH_RAMP_UP +* (see include/scsi/scsi_host.h for definition) +* +* Returns queue depth. +*/ +static int +srp_change_queue_depth (struct scsi_device *sdev,int qdepth,int reason) +{ +struct Scsi_Host *shost = sdev->host; +int max_depth; +if (reason ==SCSI_QDEPTH_DEFAULT || reason ==SCSI_QDEPTH_RAMP_UP ) { + max_depth = shost->can_queue; +if (!sdev->tagged_supported) + max_depth =1 ; +if (qdepth > max_depth) + qdepth = max_depth; +scsi_adjust_queue_depth (sdev,scsi_get_tag_type (sdev), qdepth); + }else if (reason ==SCSI_QDEPTH_QFULL ) +scsi_track_queue_full (sdev, qdepth); +else +return -EOPNOTSUPP ; + +return sdev->queue_depth; +} +static int srp_send_tsk_mgmt (struct srp_target_port *target,u64 req_tag,unsigned int lun,u8 func){
drivers/infiniband/ulp/srp/ib_srp.c static struct scsi_host_template srp_template = { · line 2319
Quoted 8 lines
drivers/infiniband/ulp/srp/ib_srp.c +2
-0@@ -2260,6 +2312,8 @@ static struct scsi_host_template srp_template = { .slave_configure = srp_slave_configure, .info = srp_target_info, .queuecommand = srp_queuecommand, + .change_queue_depth = srp_change_queue_depth, + .change_queue_type = srp_change_queue_type, .eh_abort_handler = srp_abort, .eh_device_reset_handler = srp_reset_device, .eh_host_reset_handler = srp_reset_host,
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): [email protected]
David Dillow
Acked-byQuoted 9 lines · Jack Wang
Quoted 4 lines · Jack Wang
Hi,
Below patch is new version which address comments from Bart.
Hi Roland,
Could you included this in your tree or do you need me resend it?
I expect to get through Bart's patches later today.
Signature · 9 lines
Dave Dillow National Center for Computational Science Oak Ridge National Laboratory (865) 241-6602 office -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html