aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target
diff options
context:
space:
mode:
authorNicholas Bellinger <nab@linux-iscsi.org>2015-03-29 22:36:16 -0400
committerNicholas Bellinger <nab@linux-iscsi.org>2015-04-08 02:27:48 -0400
commit901c04a33f138e5fb935a1621375a1a0997fe7b1 (patch)
treef56b32598102c83b8373a39b00512db37b30eb0b /drivers/target
parent64b16887749fd8e8000cc2ad1acca3cd29f84086 (diff)
iscsi/iser-target: Add fabric_prot_type attribute support
This patch updates iscsi/iser-target to add a new fabric_prot_type TPG attribute for iser-target, used for controlling LLD level protection into LIO when the backend device does not support T10-PI. This is required for ib_isert to enable WRITE_STRIP + READ_INSERT hardware offloads. It's disabled by default and controls which se_sesion->sess_prot_type are set at iscsi_target_locate_portal() session registration time. Cc: Sagi Grimberg <sagig@mellanox.com> Cc: Martin Petersen <martin.petersen@oracle.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target')
-rw-r--r--drivers/target/iscsi/iscsi_target_configfs.c22
-rw-r--r--drivers/target/iscsi/iscsi_target_tpg.c19
-rw-r--r--drivers/target/iscsi/iscsi_target_tpg.h1
3 files changed, 42 insertions, 0 deletions
diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c
index 95a67f604073..9cb5ab472a52 100644
--- a/drivers/target/iscsi/iscsi_target_configfs.c
+++ b/drivers/target/iscsi/iscsi_target_configfs.c
@@ -1052,6 +1052,11 @@ TPG_ATTR(default_erl, S_IRUGO | S_IWUSR);
1052 */ 1052 */
1053DEF_TPG_ATTRIB(t10_pi); 1053DEF_TPG_ATTRIB(t10_pi);
1054TPG_ATTR(t10_pi, S_IRUGO | S_IWUSR); 1054TPG_ATTR(t10_pi, S_IRUGO | S_IWUSR);
1055/*
1056 * Define iscsi_tpg_attrib_s_fabric_prot_type
1057 */
1058DEF_TPG_ATTRIB(fabric_prot_type);
1059TPG_ATTR(fabric_prot_type, S_IRUGO | S_IWUSR);
1055 1060
1056static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { 1061static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
1057 &iscsi_tpg_attrib_authentication.attr, 1062 &iscsi_tpg_attrib_authentication.attr,
@@ -1065,6 +1070,7 @@ static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
1065 &iscsi_tpg_attrib_demo_mode_discovery.attr, 1070 &iscsi_tpg_attrib_demo_mode_discovery.attr,
1066 &iscsi_tpg_attrib_default_erl.attr, 1071 &iscsi_tpg_attrib_default_erl.attr,
1067 &iscsi_tpg_attrib_t10_pi.attr, 1072 &iscsi_tpg_attrib_t10_pi.attr,
1073 &iscsi_tpg_attrib_fabric_prot_type.attr,
1068 NULL, 1074 NULL,
1069}; 1075};
1070 1076
@@ -1882,6 +1888,20 @@ static int lio_tpg_check_prod_mode_write_protect(
1882 return tpg->tpg_attrib.prod_mode_write_protect; 1888 return tpg->tpg_attrib.prod_mode_write_protect;
1883} 1889}
1884 1890
1891static int lio_tpg_check_prot_fabric_only(
1892 struct se_portal_group *se_tpg)
1893{
1894 struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr;
1895 /*
1896 * Only report fabric_prot_type if t10_pi has also been enabled
1897 * for incoming ib_isert sessions.
1898 */
1899 if (!tpg->tpg_attrib.t10_pi)
1900 return 0;
1901
1902 return tpg->tpg_attrib.fabric_prot_type;
1903}
1904
1885static void lio_tpg_release_fabric_acl( 1905static void lio_tpg_release_fabric_acl(
1886 struct se_portal_group *se_tpg, 1906 struct se_portal_group *se_tpg,
1887 struct se_node_acl *se_acl) 1907 struct se_node_acl *se_acl)
@@ -1997,6 +2017,8 @@ int iscsi_target_register_configfs(void)
1997 &lio_tpg_check_demo_mode_write_protect; 2017 &lio_tpg_check_demo_mode_write_protect;
1998 fabric->tf_ops.tpg_check_prod_mode_write_protect = 2018 fabric->tf_ops.tpg_check_prod_mode_write_protect =
1999 &lio_tpg_check_prod_mode_write_protect; 2019 &lio_tpg_check_prod_mode_write_protect;
2020 fabric->tf_ops.tpg_check_prot_fabric_only =
2021 &lio_tpg_check_prot_fabric_only;
2000 fabric->tf_ops.tpg_alloc_fabric_acl = &lio_tpg_alloc_fabric_acl; 2022 fabric->tf_ops.tpg_alloc_fabric_acl = &lio_tpg_alloc_fabric_acl;
2001 fabric->tf_ops.tpg_release_fabric_acl = &lio_tpg_release_fabric_acl; 2023 fabric->tf_ops.tpg_release_fabric_acl = &lio_tpg_release_fabric_acl;
2002 fabric->tf_ops.tpg_get_inst_index = &lio_tpg_get_inst_index; 2024 fabric->tf_ops.tpg_get_inst_index = &lio_tpg_get_inst_index;
diff --git a/drivers/target/iscsi/iscsi_target_tpg.c b/drivers/target/iscsi/iscsi_target_tpg.c
index bdd127c0e3ae..3076e6f3a831 100644
--- a/drivers/target/iscsi/iscsi_target_tpg.c
+++ b/drivers/target/iscsi/iscsi_target_tpg.c
@@ -228,6 +228,7 @@ static void iscsit_set_default_tpg_attribs(struct iscsi_portal_group *tpg)
228 a->demo_mode_discovery = TA_DEMO_MODE_DISCOVERY; 228 a->demo_mode_discovery = TA_DEMO_MODE_DISCOVERY;
229 a->default_erl = TA_DEFAULT_ERL; 229 a->default_erl = TA_DEFAULT_ERL;
230 a->t10_pi = TA_DEFAULT_T10_PI; 230 a->t10_pi = TA_DEFAULT_T10_PI;
231 a->fabric_prot_type = TA_DEFAULT_FABRIC_PROT_TYPE;
231} 232}
232 233
233int iscsit_tpg_add_portal_group(struct iscsi_tiqn *tiqn, struct iscsi_portal_group *tpg) 234int iscsit_tpg_add_portal_group(struct iscsi_tiqn *tiqn, struct iscsi_portal_group *tpg)
@@ -878,3 +879,21 @@ int iscsit_ta_t10_pi(
878 879
879 return 0; 880 return 0;
880} 881}
882
883int iscsit_ta_fabric_prot_type(
884 struct iscsi_portal_group *tpg,
885 u32 prot_type)
886{
887 struct iscsi_tpg_attrib *a = &tpg->tpg_attrib;
888
889 if ((prot_type != 0) && (prot_type != 1) && (prot_type != 3)) {
890 pr_err("Illegal value for fabric_prot_type: %u\n", prot_type);
891 return -EINVAL;
892 }
893
894 a->fabric_prot_type = prot_type;
895 pr_debug("iSCSI_TPG[%hu] - T10 Fabric Protection Type: %u\n",
896 tpg->tpgt, prot_type);
897
898 return 0;
899}
diff --git a/drivers/target/iscsi/iscsi_target_tpg.h b/drivers/target/iscsi/iscsi_target_tpg.h
index e7265337bc43..95ff5bdecd71 100644
--- a/drivers/target/iscsi/iscsi_target_tpg.h
+++ b/drivers/target/iscsi/iscsi_target_tpg.h
@@ -39,5 +39,6 @@ extern int iscsit_ta_prod_mode_write_protect(struct iscsi_portal_group *, u32);
39extern int iscsit_ta_demo_mode_discovery(struct iscsi_portal_group *, u32); 39extern int iscsit_ta_demo_mode_discovery(struct iscsi_portal_group *, u32);
40extern int iscsit_ta_default_erl(struct iscsi_portal_group *, u32); 40extern int iscsit_ta_default_erl(struct iscsi_portal_group *, u32);
41extern int iscsit_ta_t10_pi(struct iscsi_portal_group *, u32); 41extern int iscsit_ta_t10_pi(struct iscsi_portal_group *, u32);
42extern int iscsit_ta_fabric_prot_type(struct iscsi_portal_group *, u32);
42 43
43#endif /* ISCSI_TARGET_TPG_H */ 44#endif /* ISCSI_TARGET_TPG_H */