Skip to content

Commit d1fa7a1

Browse files
author
Nicholas Bellinger
committed
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 <[email protected]> Signed-off-by: Nicholas Bellinger <[email protected]>
1 parent b0a382c commit d1fa7a1

File tree

6 files changed

+36
-7
lines changed

6 files changed

+36
-7
lines changed

drivers/target/iscsi/iscsi_target_configfs.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1046,6 +1046,11 @@ TPG_ATTR(prod_mode_write_protect, S_IRUGO | S_IWUSR);
10461046
*/
10471047
DEF_TPG_ATTRIB(demo_mode_discovery);
10481048
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);
10491054

10501055
static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
10511056
&iscsi_tpg_attrib_authentication.attr,
@@ -1057,6 +1062,7 @@ static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
10571062
&iscsi_tpg_attrib_demo_mode_write_protect.attr,
10581063
&iscsi_tpg_attrib_prod_mode_write_protect.attr,
10591064
&iscsi_tpg_attrib_demo_mode_discovery.attr,
1065+
&iscsi_tpg_attrib_default_erl.attr,
10601066
NULL,
10611067
};
10621068

@@ -1919,9 +1925,12 @@ static void lio_set_default_node_attributes(struct se_node_acl *se_acl)
19191925
{
19201926
struct iscsi_node_acl *acl = container_of(se_acl, struct iscsi_node_acl,
19211927
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);
19221931

19231932
acl->node_attrib.nacl = acl;
1924-
iscsit_set_default_node_attribues(acl);
1933+
iscsit_set_default_node_attribues(acl, tpg);
19251934
}
19261935

19271936
static int lio_check_stop_free(struct se_cmd *se_cmd)

drivers/target/iscsi/iscsi_target_core.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@
3737
#define NA_RANDOM_DATAIN_PDU_OFFSETS 0
3838
#define NA_RANDOM_DATAIN_SEQ_OFFSETS 0
3939
#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
4340

4441
/* struct iscsi_tpg_attrib sanity values */
4542
#define TA_AUTHENTICATION 1
@@ -59,6 +56,7 @@
5956
/* Disabled by default in production mode w/ explict ACLs */
6057
#define TA_PROD_MODE_WRITE_PROTECT 0
6158
#define TA_DEMO_MODE_DISCOVERY 1
59+
#define TA_DEFAULT_ERL 0
6260
#define TA_CACHE_CORE_NPS 0
6361

6462

@@ -766,6 +764,7 @@ struct iscsi_tpg_attrib {
766764
u32 demo_mode_write_protect;
767765
u32 prod_mode_write_protect;
768766
u32 demo_mode_discovery;
767+
u32 default_erl;
769768
struct iscsi_portal_group *tpg;
770769
};
771770

drivers/target/iscsi/iscsi_target_nodeattrib.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ static inline char *iscsit_na_get_initiatorname(
3333
}
3434

3535
void iscsit_set_default_node_attribues(
36-
struct iscsi_node_acl *acl)
36+
struct iscsi_node_acl *acl,
37+
struct iscsi_portal_group *tpg)
3738
{
3839
struct iscsi_node_attrib *a = &acl->node_attrib;
3940

@@ -44,7 +45,7 @@ void iscsit_set_default_node_attribues(
4445
a->random_datain_pdu_offsets = NA_RANDOM_DATAIN_PDU_OFFSETS;
4546
a->random_datain_seq_offsets = NA_RANDOM_DATAIN_SEQ_OFFSETS;
4647
a->random_r2t_offsets = NA_RANDOM_R2T_OFFSETS;
47-
a->default_erl = NA_DEFAULT_ERL;
48+
a->default_erl = tpg->tpg_attrib.default_erl;
4849
}
4950

5051
int iscsit_na_dataout_timeout(

drivers/target/iscsi/iscsi_target_nodeattrib.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
#ifndef ISCSI_TARGET_NODEATTRIB_H
22
#define ISCSI_TARGET_NODEATTRIB_H
33

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 *);
56
extern int iscsit_na_dataout_timeout(struct iscsi_node_acl *, u32);
67
extern int iscsit_na_dataout_timeout_retries(struct iscsi_node_acl *, u32);
78
extern int iscsit_na_nopin_timeout(struct iscsi_node_acl *, u32);

drivers/target/iscsi/iscsi_target_tpg.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ static void iscsit_set_default_tpg_attribs(struct iscsi_portal_group *tpg)
224224
a->demo_mode_write_protect = TA_DEMO_MODE_WRITE_PROTECT;
225225
a->prod_mode_write_protect = TA_PROD_MODE_WRITE_PROTECT;
226226
a->demo_mode_discovery = TA_DEMO_MODE_DISCOVERY;
227+
a->default_erl = TA_DEFAULT_ERL;
227228
}
228229

229230
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(
840841

841842
return 0;
842843
}
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+
}

drivers/target/iscsi/iscsi_target_tpg.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,6 @@ extern int iscsit_ta_cache_dynamic_acls(struct iscsi_portal_group *, u32);
3838
extern int iscsit_ta_demo_mode_write_protect(struct iscsi_portal_group *, u32);
3939
extern int iscsit_ta_prod_mode_write_protect(struct iscsi_portal_group *, u32);
4040
extern int iscsit_ta_demo_mode_discovery(struct iscsi_portal_group *, u32);
41+
extern int iscsit_ta_default_erl(struct iscsi_portal_group *, u32);
4142

4243
#endif /* ISCSI_TARGET_TPG_H */

0 commit comments

Comments
 (0)