tcm_qla2xxx Add SCSI command jammer/discard capability
This patch introduces support for TCM_QLA2XXX_DEBUG and associated tcm_qla2xxx_tpg->tpg_attrib.jam_host checking used to test dropped packets to FC host environments. Tested by: Laurence Oberman <loberman@redhat.com> Signed-off-by: Laurence Oberman <loberman@redhat.com> Acked-by: Himanshu Madhani <himanshu.madhani@qlogic.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
2b16509c5f
commit
54a5e73f4d
4 changed files with 52 additions and 0 deletions
22
Documentation/scsi/tcm_qla2xxx.txt
Normal file
22
Documentation/scsi/tcm_qla2xxx.txt
Normal file
|
@ -0,0 +1,22 @@
|
|||
tcm_qla2xxx jam_host attribute
|
||||
------------------------------
|
||||
There is now a new module endpoint atribute called jam_host
|
||||
attribute: jam_host: boolean=0/1
|
||||
This attribute and accompanying code is only included if the
|
||||
Kconfig parameter TCM_QLA2XXX_DEBUG is set to Y
|
||||
By default this jammer code and functionality is disabled
|
||||
|
||||
Use this attribute to control the discarding of SCSI commands to a
|
||||
selected host.
|
||||
This may be useful for testing error handling and simulating slow drain
|
||||
and other fabric issues.
|
||||
|
||||
Setting a boolean of 1 for the jam_host attribute for a particular host
|
||||
will discard the commands for that host.
|
||||
Reset back to 0 to stop the jamming.
|
||||
|
||||
Enable host 4 to be jammed
|
||||
echo 1 > /sys/kernel/config/target/qla2xxx/21:00:00:24:ff:27:8f:ae/tpgt_1/attrib/jam_host
|
||||
|
||||
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
|
|
@ -36,3 +36,12 @@ config TCM_QLA2XXX
|
|||
default n
|
||||
---help---
|
||||
Say Y here to enable the TCM_QLA2XXX fabric module for QLogic 24xx+ series target mode HBAs
|
||||
|
||||
if TCM_QLA2XXX
|
||||
config TCM_QLA2XXX_DEBUG
|
||||
bool "TCM_QLA2XXX fabric module DEBUG mode for QLogic 24xx+ series target mode HBAs"
|
||||
default n
|
||||
---help---
|
||||
Say Y here to enable the TCM_QLA2XXX fabric module DEBUG for QLogic 24xx+ series target mode HBAs
|
||||
This will include code to enable the SCSI command jammer
|
||||
endif
|
||||
|
|
|
@ -442,6 +442,10 @@ static int tcm_qla2xxx_handle_cmd(scsi_qla_host_t *vha, struct qla_tgt_cmd *cmd,
|
|||
struct se_cmd *se_cmd = &cmd->se_cmd;
|
||||
struct se_session *se_sess;
|
||||
struct qla_tgt_sess *sess;
|
||||
#ifdef CONFIG_TCM_QLA2XXX_DEBUG
|
||||
struct se_portal_group *se_tpg;
|
||||
struct tcm_qla2xxx_tpg *tpg;
|
||||
#endif
|
||||
int flags = TARGET_SCF_ACK_KREF;
|
||||
|
||||
if (bidi)
|
||||
|
@ -462,6 +466,15 @@ static int tcm_qla2xxx_handle_cmd(scsi_qla_host_t *vha, struct qla_tgt_cmd *cmd,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TCM_QLA2XXX_DEBUG
|
||||
se_tpg = se_sess->se_tpg;
|
||||
tpg = container_of(se_tpg, struct tcm_qla2xxx_tpg, se_tpg);
|
||||
if (unlikely(tpg->tpg_attrib.jam_host)) {
|
||||
/* return, and dont run target_submit_cmd,discarding command */
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
cmd->vha->tgt_counters.qla_core_sbt_cmd++;
|
||||
return target_submit_cmd(se_cmd, se_sess, cdb, &cmd->sense_buffer[0],
|
||||
cmd->unpacked_lun, data_length, fcp_task_attr,
|
||||
|
@ -812,6 +825,9 @@ DEF_QLA_TPG_ATTRIB(cache_dynamic_acls);
|
|||
DEF_QLA_TPG_ATTRIB(demo_mode_write_protect);
|
||||
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);
|
||||
#endif
|
||||
|
||||
static struct configfs_attribute *tcm_qla2xxx_tpg_attrib_attrs[] = {
|
||||
&tcm_qla2xxx_tpg_attrib_attr_generate_node_acls,
|
||||
|
@ -819,6 +835,9 @@ static struct configfs_attribute *tcm_qla2xxx_tpg_attrib_attrs[] = {
|
|||
&tcm_qla2xxx_tpg_attrib_attr_demo_mode_write_protect,
|
||||
&tcm_qla2xxx_tpg_attrib_attr_prod_mode_write_protect,
|
||||
&tcm_qla2xxx_tpg_attrib_attr_demo_mode_login_only,
|
||||
#ifdef CONFIG_TCM_QLA2XXX_DEBUG
|
||||
&tcm_qla2xxx_tpg_attrib_attr_jam_host,
|
||||
#endif
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
@ -991,6 +1010,7 @@ static struct se_portal_group *tcm_qla2xxx_make_tpg(
|
|||
tpg->tpg_attrib.demo_mode_write_protect = 1;
|
||||
tpg->tpg_attrib.cache_dynamic_acls = 1;
|
||||
tpg->tpg_attrib.demo_mode_login_only = 1;
|
||||
tpg->tpg_attrib.jam_host = 0;
|
||||
|
||||
ret = core_tpg_register(wwn, &tpg->se_tpg, SCSI_PROTOCOL_FCP);
|
||||
if (ret < 0) {
|
||||
|
|
|
@ -34,6 +34,7 @@ struct tcm_qla2xxx_tpg_attrib {
|
|||
int prod_mode_write_protect;
|
||||
int demo_mode_login_only;
|
||||
int fabric_prot_type;
|
||||
int jam_host;
|
||||
};
|
||||
|
||||
struct tcm_qla2xxx_tpg {
|
||||
|
|
Loading…
Reference in a new issue