diff mbox

tcm_qla2xxx Add SCSI command jammer/discard capability to the tcm_qla2xxx module - enhancements

Message ID 2049960802.3555391.1472592259703.JavaMail.zimbra@redhat.com (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Laurence Oberman Aug. 30, 2016, 9:24 p.m. UTC
Hello Himanshu and Nicholas,

Enhancements to the tcm_debug code.
Added the possibility of blocking only specific SCSI data movement commands but allowing TUR'S to pass.
This has been helpful for debugging many driver/array interoperabilty issues.

Two Patches, The first is to the driver code, second is updating the documentation.

Tested by: Laurence Oberman <loberman@redhat.com>
Signed-off-by: Laurence Oberman <loberman@redhat.com>

 drivers/scsi/qla2xxx/tcm_qla2xxx.c | 7 +++++++
 drivers/scsi/qla2xxx/tcm_qla2xxx.h | 1 +
 2 files changed, 8 insertions(+)

Comments

Laurence Oberman Aug. 30, 2016, 9:31 p.m. UTC | #1
----- Original Message -----
> From: "Laurence Oberman" <loberman@redhat.com>
> To: "himanshu madhani" <himanshu.madhani@qlogic.com>, nab@linux-iscsi.org, "Linux SCSI Mailinglist"
> <linux-scsi@vger.kernel.org>
> Sent: Tuesday, August 30, 2016 5:24:19 PM
> Subject: [PATCH] tcm_qla2xxx Add SCSI command jammer/discard capability to the tcm_qla2xxx module - enhancements
> 
> Hello Himanshu and Nicholas,
> 
> Enhancements to the tcm_debug code.
> Added the possibility of blocking only specific SCSI data movement commands
> but allowing TUR'S to pass.
> This has been helpful for debugging many driver/array interoperabilty issues.
> 
> Two Patches, The first is to the driver code, second is updating the
> documentation.
> 
> Tested by: Laurence Oberman <loberman@redhat.com>
> Signed-off-by: Laurence Oberman <loberman@redhat.com>
> 
>  drivers/scsi/qla2xxx/tcm_qla2xxx.c | 7 +++++++
>  drivers/scsi/qla2xxx/tcm_qla2xxx.h | 1 +
>  2 files changed, 8 insertions(+)
> 
> diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
> b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
> index 6643f6f..d620a77 100644
> --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
> +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
> @@ -473,6 +473,10 @@ static int tcm_qla2xxx_handle_cmd(scsi_qla_host_t *vha,
> struct qla_tgt_cmd *cmd,
>  		/* return, and dont run target_submit_cmd,discarding command */
>  		return 0;
>  	}
> +	if (unlikely(tpg->tpg_attrib.jam_host && tpg->tpg_attrib.jam_data &&
> (cdb[0]==0x08 || cdb[0]==0x0A || cdb[0]==0x28 || cdb[0]==0x2A))) {
> +                /* return, and dont run target_submit_cmd,discarding command
> if not TUR*/
> +                return 0;
> +        }
>  #endif
>  
>  	cmd->vha->tgt_counters.qla_core_sbt_cmd++;
> @@ -827,6 +831,7 @@ DEF_QLA_TPG_ATTRIB(prod_mode_write_protect);
>  DEF_QLA_TPG_ATTRIB(demo_mode_login_only);
>  #ifdef CONFIG_TCM_QLA2XXX_DEBUG
>  DEF_QLA_TPG_ATTRIB(jam_host);
> +DEF_QLA_TPG_ATTRIB(jam_data);
>  #endif
>  
>  static struct configfs_attribute *tcm_qla2xxx_tpg_attrib_attrs[] = {
> @@ -837,6 +842,7 @@ static struct configfs_attribute
> *tcm_qla2xxx_tpg_attrib_attrs[] = {
>  	&tcm_qla2xxx_tpg_attrib_attr_demo_mode_login_only,
>  #ifdef CONFIG_TCM_QLA2XXX_DEBUG
>  	&tcm_qla2xxx_tpg_attrib_attr_jam_host,
> +	&tcm_qla2xxx_tpg_attrib_attr_jam_data,
>  #endif
>  	NULL,
>  };
> @@ -1011,6 +1017,7 @@ static struct se_portal_group *tcm_qla2xxx_make_tpg(
>  	tpg->tpg_attrib.cache_dynamic_acls = 1;
>  	tpg->tpg_attrib.demo_mode_login_only = 1;
>  	tpg->tpg_attrib.jam_host = 0;
> +	tpg->tpg_attrib.jam_data = 0;
>  
>  	ret = core_tpg_register(wwn, &tpg->se_tpg, SCSI_PROTOCOL_FCP);
>  	if (ret < 0) {
> diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.h
> b/drivers/scsi/qla2xxx/tcm_qla2xxx.h
> index 37e026a..789bdeb 100644
> --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.h
> +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.h
> @@ -35,6 +35,7 @@ struct tcm_qla2xxx_tpg_attrib {
>  	int demo_mode_login_only;
>  	int fabric_prot_type;
>  	int jam_host;
> +	int jam_data;
>  };
>  
>  struct tcm_qla2xxx_tpg {
> --
> 2.5.5
> 
> 
> 
>  Documentation/scsi/tcm_qla2xxx.txt | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/Documentation/scsi/tcm_qla2xxx.txt
> b/Documentation/scsi/tcm_qla2xxx.txt
> index c3a670a..4a8706c 100644
> --- a/Documentation/scsi/tcm_qla2xxx.txt
> +++ b/Documentation/scsi/tcm_qla2xxx.txt
> @@ -20,3 +20,19 @@ echo 1 >
> /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib
>  
>  Disable jamming on host 4
>  echo 0 >
>  /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib/jam_host
> +
> +New feature added with  a new attribute called jam_data.
> +
> +Setting a boolean of 1 for jam_data as well as setting the boolean of 1 for
> jam_host will
> + allow the dropping of data-only SCSI commands but allow TUR commands to
> pass.
> +
> +This has proven very useful for testing Low Level driver response.
> +
> +Enable host 4 for only data commands to be jammed
> +echo 1 >
> /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib/jam_host
> +echo 1 >
> /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib/jam_data
> +
> +Disable jamming on host 4
> +echo 0 >
> /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib/jam_host
> +echo 0 >
> /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib/jam_data
> +
> --
> 2.5.5
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

Oops
Replying to my own message
I need to send a V2 of this patch, apologies, just realized match on first check of jam_host so 2nd check wont be met.
When testing only had 2nd check in code and only just saw it.

Back shortly
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
index 6643f6f..d620a77 100644
--- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
+++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
@@ -473,6 +473,10 @@  static int tcm_qla2xxx_handle_cmd(scsi_qla_host_t *vha, struct qla_tgt_cmd *cmd,
 		/* return, and dont run target_submit_cmd,discarding command */
 		return 0;
 	}
+	if (unlikely(tpg->tpg_attrib.jam_host && tpg->tpg_attrib.jam_data && (cdb[0]==0x08 || cdb[0]==0x0A || cdb[0]==0x28 || cdb[0]==0x2A))) {
+                /* return, and dont run target_submit_cmd,discarding command if not TUR*/
+                return 0;
+        }
 #endif
 
 	cmd->vha->tgt_counters.qla_core_sbt_cmd++;
@@ -827,6 +831,7 @@  DEF_QLA_TPG_ATTRIB(prod_mode_write_protect);
 DEF_QLA_TPG_ATTRIB(demo_mode_login_only);
 #ifdef CONFIG_TCM_QLA2XXX_DEBUG
 DEF_QLA_TPG_ATTRIB(jam_host);
+DEF_QLA_TPG_ATTRIB(jam_data);
 #endif
 
 static struct configfs_attribute *tcm_qla2xxx_tpg_attrib_attrs[] = {
@@ -837,6 +842,7 @@  static struct configfs_attribute *tcm_qla2xxx_tpg_attrib_attrs[] = {
 	&tcm_qla2xxx_tpg_attrib_attr_demo_mode_login_only,
 #ifdef CONFIG_TCM_QLA2XXX_DEBUG
 	&tcm_qla2xxx_tpg_attrib_attr_jam_host,
+	&tcm_qla2xxx_tpg_attrib_attr_jam_data,
 #endif
 	NULL,
 };
@@ -1011,6 +1017,7 @@  static struct se_portal_group *tcm_qla2xxx_make_tpg(
 	tpg->tpg_attrib.cache_dynamic_acls = 1;
 	tpg->tpg_attrib.demo_mode_login_only = 1;
 	tpg->tpg_attrib.jam_host = 0;
+	tpg->tpg_attrib.jam_data = 0;
 
 	ret = core_tpg_register(wwn, &tpg->se_tpg, SCSI_PROTOCOL_FCP);
 	if (ret < 0) {
diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.h b/drivers/scsi/qla2xxx/tcm_qla2xxx.h
index 37e026a..789bdeb 100644
--- a/drivers/scsi/qla2xxx/tcm_qla2xxx.h
+++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.h
@@ -35,6 +35,7 @@  struct tcm_qla2xxx_tpg_attrib {
 	int demo_mode_login_only;
 	int fabric_prot_type;
 	int jam_host;
+	int jam_data;
 };
 
 struct tcm_qla2xxx_tpg {
-- 
2.5.5



 Documentation/scsi/tcm_qla2xxx.txt | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/Documentation/scsi/tcm_qla2xxx.txt b/Documentation/scsi/tcm_qla2xxx.txt
index c3a670a..4a8706c 100644
--- a/Documentation/scsi/tcm_qla2xxx.txt
+++ b/Documentation/scsi/tcm_qla2xxx.txt
@@ -20,3 +20,19 @@  echo 1 > /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib
 
 Disable jamming on host 4
 echo 0 > /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib/jam_host
+
+New feature added with  a new attribute called jam_data.
+
+Setting a boolean of 1 for jam_data as well as setting the boolean of 1 for jam_host will
+ allow the dropping of data-only SCSI commands but allow TUR commands to pass.
+
+This has proven very useful for testing Low Level driver response.
+
+Enable host 4 for only data commands to be jammed
+echo 1 > /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib/jam_host
+echo 1 > /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib/jam_data
+
+Disable jamming on host 4
+echo 0 > /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib/jam_host
+echo 0 > /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib/jam_data
+