Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d1fa7a1d authored by Nicholas Bellinger's avatar Nicholas Bellinger
Browse files

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: default avatarArshad Hussain <arshad.hussain@calsoftinc.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent b0a382c5
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -1046,6 +1046,11 @@ TPG_ATTR(prod_mode_write_protect, S_IRUGO | S_IWUSR);
 */
DEF_TPG_ATTRIB(demo_mode_discovery);
TPG_ATTR(demo_mode_discovery, S_IRUGO | S_IWUSR);
/*
 * Define iscsi_tpg_attrib_s_default_erl
 */
DEF_TPG_ATTRIB(default_erl);
TPG_ATTR(default_erl, S_IRUGO | S_IWUSR);

static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
	&iscsi_tpg_attrib_authentication.attr,
@@ -1057,6 +1062,7 @@ static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
	&iscsi_tpg_attrib_demo_mode_write_protect.attr,
	&iscsi_tpg_attrib_prod_mode_write_protect.attr,
	&iscsi_tpg_attrib_demo_mode_discovery.attr,
	&iscsi_tpg_attrib_default_erl.attr,
	NULL,
};

@@ -1919,9 +1925,12 @@ static void lio_set_default_node_attributes(struct se_node_acl *se_acl)
{
	struct iscsi_node_acl *acl = container_of(se_acl, struct iscsi_node_acl,
				se_node_acl);
	struct se_portal_group *se_tpg = se_acl->se_tpg;
	struct iscsi_portal_group *tpg = container_of(se_tpg,
				struct iscsi_portal_group, tpg_se_tpg);

	acl->node_attrib.nacl = acl;
	iscsit_set_default_node_attribues(acl);
	iscsit_set_default_node_attribues(acl, tpg);
}

static int lio_check_stop_free(struct se_cmd *se_cmd)
+2 −3
Original line number Diff line number Diff line
@@ -37,9 +37,6 @@
#define NA_RANDOM_DATAIN_PDU_OFFSETS	0
#define NA_RANDOM_DATAIN_SEQ_OFFSETS	0
#define NA_RANDOM_R2T_OFFSETS		0
#define NA_DEFAULT_ERL			0
#define NA_DEFAULT_ERL_MAX		2
#define NA_DEFAULT_ERL_MIN		0

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


@@ -766,6 +764,7 @@ struct iscsi_tpg_attrib {
	u32			demo_mode_write_protect;
	u32			prod_mode_write_protect;
	u32			demo_mode_discovery;
	u32			default_erl;
	struct iscsi_portal_group *tpg;
};

+3 −2
Original line number Diff line number Diff line
@@ -33,7 +33,8 @@ static inline char *iscsit_na_get_initiatorname(
}

void iscsit_set_default_node_attribues(
	struct iscsi_node_acl *acl)
	struct iscsi_node_acl *acl,
	struct iscsi_portal_group *tpg)
{
	struct iscsi_node_attrib *a = &acl->node_attrib;

@@ -44,7 +45,7 @@ void iscsit_set_default_node_attribues(
	a->random_datain_pdu_offsets = NA_RANDOM_DATAIN_PDU_OFFSETS;
	a->random_datain_seq_offsets = NA_RANDOM_DATAIN_SEQ_OFFSETS;
	a->random_r2t_offsets = NA_RANDOM_R2T_OFFSETS;
	a->default_erl = NA_DEFAULT_ERL;
	a->default_erl = tpg->tpg_attrib.default_erl;
}

int iscsit_na_dataout_timeout(
+2 −1
Original line number Diff line number Diff line
#ifndef ISCSI_TARGET_NODEATTRIB_H
#define ISCSI_TARGET_NODEATTRIB_H

extern void iscsit_set_default_node_attribues(struct iscsi_node_acl *);
extern void iscsit_set_default_node_attribues(struct iscsi_node_acl *,
					      struct iscsi_portal_group *);
extern int iscsit_na_dataout_timeout(struct iscsi_node_acl *, u32);
extern int iscsit_na_dataout_timeout_retries(struct iscsi_node_acl *, u32);
extern int iscsit_na_nopin_timeout(struct iscsi_node_acl *, u32);
+18 −0
Original line number Diff line number Diff line
@@ -224,6 +224,7 @@ static void iscsit_set_default_tpg_attribs(struct iscsi_portal_group *tpg)
	a->demo_mode_write_protect = TA_DEMO_MODE_WRITE_PROTECT;
	a->prod_mode_write_protect = TA_PROD_MODE_WRITE_PROTECT;
	a->demo_mode_discovery = TA_DEMO_MODE_DISCOVERY;
	a->default_erl = TA_DEFAULT_ERL;
}

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(

	return 0;
}

int iscsit_ta_default_erl(
	struct iscsi_portal_group *tpg,
	u32 default_erl)
{
	struct iscsi_tpg_attrib *a = &tpg->tpg_attrib;

	if ((default_erl != 0) && (default_erl != 1) && (default_erl != 2)) {
		pr_err("Illegal value for default_erl: %u\n", default_erl);
		return -EINVAL;
	}

	a->default_erl = default_erl;
	pr_debug("iSCSI_TPG[%hu] - DefaultERL: %u\n", tpg->tpgt, a->default_erl);

	return 0;
}
Loading