diff options
-rw-r--r-- | drivers/target/iscsi/iscsi_target_configfs.c | 11 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_core.h | 5 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_nodeattrib.c | 5 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_nodeattrib.h | 3 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_tpg.c | 18 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_tpg.h | 1 |
6 files changed, 36 insertions, 7 deletions
diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c index fde3624dce7e..e3318edb233d 100644 --- a/drivers/target/iscsi/iscsi_target_configfs.c +++ b/drivers/target/iscsi/iscsi_target_configfs.c | |||
@@ -1046,6 +1046,11 @@ TPG_ATTR(prod_mode_write_protect, S_IRUGO | S_IWUSR); | |||
1046 | */ | 1046 | */ |
1047 | DEF_TPG_ATTRIB(demo_mode_discovery); | 1047 | DEF_TPG_ATTRIB(demo_mode_discovery); |
1048 | TPG_ATTR(demo_mode_discovery, S_IRUGO | S_IWUSR); | 1048 | TPG_ATTR(demo_mode_discovery, S_IRUGO | S_IWUSR); |
1049 | /* | ||
1050 | * Define iscsi_tpg_attrib_s_default_erl | ||
1051 | */ | ||
1052 | DEF_TPG_ATTRIB(default_erl); | ||
1053 | TPG_ATTR(default_erl, S_IRUGO | S_IWUSR); | ||
1049 | 1054 | ||
1050 | static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { | 1055 | static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { |
1051 | &iscsi_tpg_attrib_authentication.attr, | 1056 | &iscsi_tpg_attrib_authentication.attr, |
@@ -1057,6 +1062,7 @@ static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { | |||
1057 | &iscsi_tpg_attrib_demo_mode_write_protect.attr, | 1062 | &iscsi_tpg_attrib_demo_mode_write_protect.attr, |
1058 | &iscsi_tpg_attrib_prod_mode_write_protect.attr, | 1063 | &iscsi_tpg_attrib_prod_mode_write_protect.attr, |
1059 | &iscsi_tpg_attrib_demo_mode_discovery.attr, | 1064 | &iscsi_tpg_attrib_demo_mode_discovery.attr, |
1065 | &iscsi_tpg_attrib_default_erl.attr, | ||
1060 | NULL, | 1066 | NULL, |
1061 | }; | 1067 | }; |
1062 | 1068 | ||
@@ -1919,9 +1925,12 @@ static void lio_set_default_node_attributes(struct se_node_acl *se_acl) | |||
1919 | { | 1925 | { |
1920 | struct iscsi_node_acl *acl = container_of(se_acl, struct iscsi_node_acl, | 1926 | struct iscsi_node_acl *acl = container_of(se_acl, struct iscsi_node_acl, |
1921 | se_node_acl); | 1927 | se_node_acl); |
1928 | struct se_portal_group *se_tpg = se_acl->se_tpg; | ||
1929 | struct iscsi_portal_group *tpg = container_of(se_tpg, | ||
1930 | struct iscsi_portal_group, tpg_se_tpg); | ||
1922 | 1931 | ||
1923 | acl->node_attrib.nacl = acl; | 1932 | acl->node_attrib.nacl = acl; |
1924 | iscsit_set_default_node_attribues(acl); | 1933 | iscsit_set_default_node_attribues(acl, tpg); |
1925 | } | 1934 | } |
1926 | 1935 | ||
1927 | static int lio_check_stop_free(struct se_cmd *se_cmd) | 1936 | static int lio_check_stop_free(struct se_cmd *se_cmd) |
diff --git a/drivers/target/iscsi/iscsi_target_core.h b/drivers/target/iscsi/iscsi_target_core.h index 8dcb3c1aa801..48f7b3bf4e8c 100644 --- a/drivers/target/iscsi/iscsi_target_core.h +++ b/drivers/target/iscsi/iscsi_target_core.h | |||
@@ -37,9 +37,6 @@ | |||
37 | #define NA_RANDOM_DATAIN_PDU_OFFSETS 0 | 37 | #define NA_RANDOM_DATAIN_PDU_OFFSETS 0 |
38 | #define NA_RANDOM_DATAIN_SEQ_OFFSETS 0 | 38 | #define NA_RANDOM_DATAIN_SEQ_OFFSETS 0 |
39 | #define NA_RANDOM_R2T_OFFSETS 0 | 39 | #define NA_RANDOM_R2T_OFFSETS 0 |
40 | #define NA_DEFAULT_ERL 0 | ||
41 | #define NA_DEFAULT_ERL_MAX 2 | ||
42 | #define NA_DEFAULT_ERL_MIN 0 | ||
43 | 40 | ||
44 | /* struct iscsi_tpg_attrib sanity values */ | 41 | /* struct iscsi_tpg_attrib sanity values */ |
45 | #define TA_AUTHENTICATION 1 | 42 | #define TA_AUTHENTICATION 1 |
@@ -59,6 +56,7 @@ | |||
59 | /* Disabled by default in production mode w/ explict ACLs */ | 56 | /* Disabled by default in production mode w/ explict ACLs */ |
60 | #define TA_PROD_MODE_WRITE_PROTECT 0 | 57 | #define TA_PROD_MODE_WRITE_PROTECT 0 |
61 | #define TA_DEMO_MODE_DISCOVERY 1 | 58 | #define TA_DEMO_MODE_DISCOVERY 1 |
59 | #define TA_DEFAULT_ERL 0 | ||
62 | #define TA_CACHE_CORE_NPS 0 | 60 | #define TA_CACHE_CORE_NPS 0 |
63 | 61 | ||
64 | 62 | ||
@@ -766,6 +764,7 @@ struct iscsi_tpg_attrib { | |||
766 | u32 demo_mode_write_protect; | 764 | u32 demo_mode_write_protect; |
767 | u32 prod_mode_write_protect; | 765 | u32 prod_mode_write_protect; |
768 | u32 demo_mode_discovery; | 766 | u32 demo_mode_discovery; |
767 | u32 default_erl; | ||
769 | struct iscsi_portal_group *tpg; | 768 | struct iscsi_portal_group *tpg; |
770 | }; | 769 | }; |
771 | 770 | ||
diff --git a/drivers/target/iscsi/iscsi_target_nodeattrib.c b/drivers/target/iscsi/iscsi_target_nodeattrib.c index 93bdc475eb00..16454a922e2b 100644 --- a/drivers/target/iscsi/iscsi_target_nodeattrib.c +++ b/drivers/target/iscsi/iscsi_target_nodeattrib.c | |||
@@ -33,7 +33,8 @@ static inline char *iscsit_na_get_initiatorname( | |||
33 | } | 33 | } |
34 | 34 | ||
35 | void iscsit_set_default_node_attribues( | 35 | void iscsit_set_default_node_attribues( |
36 | struct iscsi_node_acl *acl) | 36 | struct iscsi_node_acl *acl, |
37 | struct iscsi_portal_group *tpg) | ||
37 | { | 38 | { |
38 | struct iscsi_node_attrib *a = &acl->node_attrib; | 39 | struct iscsi_node_attrib *a = &acl->node_attrib; |
39 | 40 | ||
@@ -44,7 +45,7 @@ void iscsit_set_default_node_attribues( | |||
44 | a->random_datain_pdu_offsets = NA_RANDOM_DATAIN_PDU_OFFSETS; | 45 | a->random_datain_pdu_offsets = NA_RANDOM_DATAIN_PDU_OFFSETS; |
45 | a->random_datain_seq_offsets = NA_RANDOM_DATAIN_SEQ_OFFSETS; | 46 | a->random_datain_seq_offsets = NA_RANDOM_DATAIN_SEQ_OFFSETS; |
46 | a->random_r2t_offsets = NA_RANDOM_R2T_OFFSETS; | 47 | a->random_r2t_offsets = NA_RANDOM_R2T_OFFSETS; |
47 | a->default_erl = NA_DEFAULT_ERL; | 48 | a->default_erl = tpg->tpg_attrib.default_erl; |
48 | } | 49 | } |
49 | 50 | ||
50 | int iscsit_na_dataout_timeout( | 51 | int iscsit_na_dataout_timeout( |
diff --git a/drivers/target/iscsi/iscsi_target_nodeattrib.h b/drivers/target/iscsi/iscsi_target_nodeattrib.h index c970b326ef23..0c69a46a62ec 100644 --- a/drivers/target/iscsi/iscsi_target_nodeattrib.h +++ b/drivers/target/iscsi/iscsi_target_nodeattrib.h | |||
@@ -1,7 +1,8 @@ | |||
1 | #ifndef ISCSI_TARGET_NODEATTRIB_H | 1 | #ifndef ISCSI_TARGET_NODEATTRIB_H |
2 | #define ISCSI_TARGET_NODEATTRIB_H | 2 | #define ISCSI_TARGET_NODEATTRIB_H |
3 | 3 | ||
4 | extern void iscsit_set_default_node_attribues(struct iscsi_node_acl *); | 4 | extern void iscsit_set_default_node_attribues(struct iscsi_node_acl *, |
5 | struct iscsi_portal_group *); | ||
5 | extern int iscsit_na_dataout_timeout(struct iscsi_node_acl *, u32); | 6 | extern int iscsit_na_dataout_timeout(struct iscsi_node_acl *, u32); |
6 | extern int iscsit_na_dataout_timeout_retries(struct iscsi_node_acl *, u32); | 7 | extern int iscsit_na_dataout_timeout_retries(struct iscsi_node_acl *, u32); |
7 | extern int iscsit_na_nopin_timeout(struct iscsi_node_acl *, u32); | 8 | extern int iscsit_na_nopin_timeout(struct iscsi_node_acl *, u32); |
diff --git a/drivers/target/iscsi/iscsi_target_tpg.c b/drivers/target/iscsi/iscsi_target_tpg.c index 98ccf0bff546..39761837608d 100644 --- a/drivers/target/iscsi/iscsi_target_tpg.c +++ b/drivers/target/iscsi/iscsi_target_tpg.c | |||
@@ -224,6 +224,7 @@ static void iscsit_set_default_tpg_attribs(struct iscsi_portal_group *tpg) | |||
224 | a->demo_mode_write_protect = TA_DEMO_MODE_WRITE_PROTECT; | 224 | a->demo_mode_write_protect = TA_DEMO_MODE_WRITE_PROTECT; |
225 | a->prod_mode_write_protect = TA_PROD_MODE_WRITE_PROTECT; | 225 | a->prod_mode_write_protect = TA_PROD_MODE_WRITE_PROTECT; |
226 | a->demo_mode_discovery = TA_DEMO_MODE_DISCOVERY; | 226 | a->demo_mode_discovery = TA_DEMO_MODE_DISCOVERY; |
227 | a->default_erl = TA_DEFAULT_ERL; | ||
227 | } | 228 | } |
228 | 229 | ||
229 | int iscsit_tpg_add_portal_group(struct iscsi_tiqn *tiqn, struct iscsi_portal_group *tpg) | 230 | int iscsit_tpg_add_portal_group(struct iscsi_tiqn *tiqn, struct iscsi_portal_group *tpg) |
@@ -840,3 +841,20 @@ int iscsit_ta_demo_mode_discovery( | |||
840 | 841 | ||
841 | return 0; | 842 | return 0; |
842 | } | 843 | } |
844 | |||
845 | int iscsit_ta_default_erl( | ||
846 | struct iscsi_portal_group *tpg, | ||
847 | u32 default_erl) | ||
848 | { | ||
849 | struct iscsi_tpg_attrib *a = &tpg->tpg_attrib; | ||
850 | |||
851 | if ((default_erl != 0) && (default_erl != 1) && (default_erl != 2)) { | ||
852 | pr_err("Illegal value for default_erl: %u\n", default_erl); | ||
853 | return -EINVAL; | ||
854 | } | ||
855 | |||
856 | a->default_erl = default_erl; | ||
857 | pr_debug("iSCSI_TPG[%hu] - DefaultERL: %u\n", tpg->tpgt, a->default_erl); | ||
858 | |||
859 | return 0; | ||
860 | } | ||
diff --git a/drivers/target/iscsi/iscsi_target_tpg.h b/drivers/target/iscsi/iscsi_target_tpg.h index 3e8ce8644082..213c0fc7fdc9 100644 --- a/drivers/target/iscsi/iscsi_target_tpg.h +++ b/drivers/target/iscsi/iscsi_target_tpg.h | |||
@@ -38,5 +38,6 @@ extern int iscsit_ta_cache_dynamic_acls(struct iscsi_portal_group *, u32); | |||
38 | extern int iscsit_ta_demo_mode_write_protect(struct iscsi_portal_group *, u32); | 38 | extern int iscsit_ta_demo_mode_write_protect(struct iscsi_portal_group *, u32); |
39 | extern int iscsit_ta_prod_mode_write_protect(struct iscsi_portal_group *, u32); | 39 | extern int iscsit_ta_prod_mode_write_protect(struct iscsi_portal_group *, u32); |
40 | extern int iscsit_ta_demo_mode_discovery(struct iscsi_portal_group *, u32); | 40 | extern int iscsit_ta_demo_mode_discovery(struct iscsi_portal_group *, u32); |
41 | extern int iscsit_ta_default_erl(struct iscsi_portal_group *, u32); | ||
41 | 42 | ||
42 | #endif /* ISCSI_TARGET_TPG_H */ | 43 | #endif /* ISCSI_TARGET_TPG_H */ |