Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iscsi-target: Expose default_erl as TPG attribute

This patch exposes default_erl as a TPG attribute so that it may be
set TPG wide in demo-mode, but still allow the existing NodeACL
attribute to be overridden on a per initiator basis.

Reported-by: Arshad Hussain <arshad.hussain@calsoftinc.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>

+36 -7
+10 -1
drivers/target/iscsi/iscsi_target_configfs.c
··· 1046 1046 */ 1047 1047 DEF_TPG_ATTRIB(demo_mode_discovery); 1048 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 1055 static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { 1051 1056 &iscsi_tpg_attrib_authentication.attr, ··· 1062 1057 &iscsi_tpg_attrib_demo_mode_write_protect.attr, 1063 1058 &iscsi_tpg_attrib_prod_mode_write_protect.attr, 1064 1059 &iscsi_tpg_attrib_demo_mode_discovery.attr, 1060 + &iscsi_tpg_attrib_default_erl.attr, 1065 1061 NULL, 1066 1062 }; 1067 1063 ··· 1925 1919 { 1926 1920 struct iscsi_node_acl *acl = container_of(se_acl, struct iscsi_node_acl, 1927 1921 se_node_acl); 1922 + struct se_portal_group *se_tpg = se_acl->se_tpg; 1923 + struct iscsi_portal_group *tpg = container_of(se_tpg, 1924 + struct iscsi_portal_group, tpg_se_tpg); 1928 1925 1929 1926 acl->node_attrib.nacl = acl; 1930 - iscsit_set_default_node_attribues(acl); 1927 + iscsit_set_default_node_attribues(acl, tpg); 1931 1928 } 1932 1929 1933 1930 static int lio_check_stop_free(struct se_cmd *se_cmd)
+2 -3
drivers/target/iscsi/iscsi_target_core.h
··· 37 37 #define NA_RANDOM_DATAIN_PDU_OFFSETS 0 38 38 #define NA_RANDOM_DATAIN_SEQ_OFFSETS 0 39 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 41 /* struct iscsi_tpg_attrib sanity values */ 45 42 #define TA_AUTHENTICATION 1 ··· 56 59 /* Disabled by default in production mode w/ explict ACLs */ 57 60 #define TA_PROD_MODE_WRITE_PROTECT 0 58 61 #define TA_DEMO_MODE_DISCOVERY 1 62 + #define TA_DEFAULT_ERL 0 59 63 #define TA_CACHE_CORE_NPS 0 60 64 61 65 ··· 764 766 u32 demo_mode_write_protect; 765 767 u32 prod_mode_write_protect; 766 768 u32 demo_mode_discovery; 769 + u32 default_erl; 767 770 struct iscsi_portal_group *tpg; 768 771 }; 769 772
+3 -2
drivers/target/iscsi/iscsi_target_nodeattrib.c
··· 33 33 } 34 34 35 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 39 struct iscsi_node_attrib *a = &acl->node_attrib; 39 40 ··· 45 44 a->random_datain_pdu_offsets = NA_RANDOM_DATAIN_PDU_OFFSETS; 46 45 a->random_datain_seq_offsets = NA_RANDOM_DATAIN_SEQ_OFFSETS; 47 46 a->random_r2t_offsets = NA_RANDOM_R2T_OFFSETS; 48 - a->default_erl = NA_DEFAULT_ERL; 47 + a->default_erl = tpg->tpg_attrib.default_erl; 49 48 } 50 49 51 50 int iscsit_na_dataout_timeout(
+2 -1
drivers/target/iscsi/iscsi_target_nodeattrib.h
··· 1 1 #ifndef ISCSI_TARGET_NODEATTRIB_H 2 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 6 extern int iscsit_na_dataout_timeout(struct iscsi_node_acl *, u32); 6 7 extern int iscsit_na_dataout_timeout_retries(struct iscsi_node_acl *, u32); 7 8 extern int iscsit_na_nopin_timeout(struct iscsi_node_acl *, u32);
+18
drivers/target/iscsi/iscsi_target_tpg.c
··· 224 224 a->demo_mode_write_protect = TA_DEMO_MODE_WRITE_PROTECT; 225 225 a->prod_mode_write_protect = TA_PROD_MODE_WRITE_PROTECT; 226 226 a->demo_mode_discovery = TA_DEMO_MODE_DISCOVERY; 227 + a->default_erl = TA_DEFAULT_ERL; 227 228 } 228 229 229 230 int iscsit_tpg_add_portal_group(struct iscsi_tiqn *tiqn, struct iscsi_portal_group *tpg) ··· 838 837 pr_debug("iSCSI_TPG[%hu] - Demo Mode Discovery bit:" 839 838 " %s\n", tpg->tpgt, (a->demo_mode_discovery) ? 840 839 "ON" : "OFF"); 840 + 841 + return 0; 842 + } 843 + 844 + int iscsit_ta_default_erl( 845 + struct iscsi_portal_group *tpg, 846 + u32 default_erl) 847 + { 848 + struct iscsi_tpg_attrib *a = &tpg->tpg_attrib; 849 + 850 + if ((default_erl != 0) && (default_erl != 1) && (default_erl != 2)) { 851 + pr_err("Illegal value for default_erl: %u\n", default_erl); 852 + return -EINVAL; 853 + } 854 + 855 + a->default_erl = default_erl; 856 + pr_debug("iSCSI_TPG[%hu] - DefaultERL: %u\n", tpg->tpgt, a->default_erl); 841 857 842 858 return 0; 843 859 }
+1
drivers/target/iscsi/iscsi_target_tpg.h
··· 38 38 extern int iscsit_ta_demo_mode_write_protect(struct iscsi_portal_group *, u32); 39 39 extern int iscsit_ta_prod_mode_write_protect(struct iscsi_portal_group *, u32); 40 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 43 #endif /* ISCSI_TARGET_TPG_H */