Commit a11b8069 authored by Dmitry Bogdanov's avatar Dmitry Bogdanov Committed by Martin K. Petersen

scsi: target: iscsi: Add upcast helpers

iSCSI target is cluttered with open-coded container_of() conversions from
se_nacl to iscsi_node_acl. The code could be cleaned by introducing a
helper - to_iscsi_nacl() (similar to other helpers in target core).

While at it, make another iSCSI conversion helper consistent and rename
iscsi_tpg() helper to to_iscsi_tpg().

Link: https://lore.kernel.org/r/20220523095905.26070-2-d.bogdanov@yadro.comReviewed-by: default avatarRoman Bolshakov <r.bolshakov@yadro.com>
Reviewed-by: default avatarKonstantin Shelekhin <k.shelekhin@yadro.com>
Reviewed-by: default avatarMike Christie <michael.christie@oracle.com>
Reviewed-by: default avatarLee Duncan <lduncan@suse.com>
Signed-off-by: default avatarDmitry Bogdanov <d.bogdanov@yadro.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 4dc48a10
...@@ -210,7 +210,7 @@ static struct se_tpg_np *lio_target_call_addnptotpg( ...@@ -210,7 +210,7 @@ static struct se_tpg_np *lio_target_call_addnptotpg(
return ERR_PTR(ret); return ERR_PTR(ret);
} }
tpg = container_of(se_tpg, struct iscsi_portal_group, tpg_se_tpg); tpg = to_iscsi_tpg(se_tpg);
ret = iscsit_get_tpg(tpg); ret = iscsit_get_tpg(tpg);
if (ret < 0) if (ret < 0)
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
...@@ -281,9 +281,7 @@ static ssize_t iscsi_nacl_attrib_##name##_show(struct config_item *item,\ ...@@ -281,9 +281,7 @@ static ssize_t iscsi_nacl_attrib_##name##_show(struct config_item *item,\
char *page) \ char *page) \
{ \ { \
struct se_node_acl *se_nacl = attrib_to_nacl(item); \ struct se_node_acl *se_nacl = attrib_to_nacl(item); \
struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \ struct iscsi_node_acl *nacl = to_iscsi_nacl(se_nacl); \
se_node_acl); \
\
return sprintf(page, "%u\n", nacl->node_attrib.name); \ return sprintf(page, "%u\n", nacl->node_attrib.name); \
} \ } \
\ \
...@@ -291,8 +289,7 @@ static ssize_t iscsi_nacl_attrib_##name##_store(struct config_item *item,\ ...@@ -291,8 +289,7 @@ static ssize_t iscsi_nacl_attrib_##name##_store(struct config_item *item,\
const char *page, size_t count) \ const char *page, size_t count) \
{ \ { \
struct se_node_acl *se_nacl = attrib_to_nacl(item); \ struct se_node_acl *se_nacl = attrib_to_nacl(item); \
struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \ struct iscsi_node_acl *nacl = to_iscsi_nacl(se_nacl); \
se_node_acl); \
u32 val; \ u32 val; \
int ret; \ int ret; \
\ \
...@@ -377,15 +374,14 @@ static ssize_t iscsi_nacl_auth_##name##_show(struct config_item *item, \ ...@@ -377,15 +374,14 @@ static ssize_t iscsi_nacl_auth_##name##_show(struct config_item *item, \
char *page) \ char *page) \
{ \ { \
struct se_node_acl *nacl = auth_to_nacl(item); \ struct se_node_acl *nacl = auth_to_nacl(item); \
return __iscsi_nacl_auth_##name##_show(container_of(nacl, \ return __iscsi_nacl_auth_##name##_show(to_iscsi_nacl(nacl), page); \
struct iscsi_node_acl, se_node_acl), page); \
} \ } \
static ssize_t iscsi_nacl_auth_##name##_store(struct config_item *item, \ static ssize_t iscsi_nacl_auth_##name##_store(struct config_item *item, \
const char *page, size_t count) \ const char *page, size_t count) \
{ \ { \
struct se_node_acl *nacl = auth_to_nacl(item); \ struct se_node_acl *nacl = auth_to_nacl(item); \
return __iscsi_nacl_auth_##name##_store(container_of(nacl, \ return __iscsi_nacl_auth_##name##_store(to_iscsi_nacl(nacl), \
struct iscsi_node_acl, se_node_acl), page, count); \ page, count); \
} \ } \
\ \
CONFIGFS_ATTR(iscsi_nacl_auth_, name) CONFIGFS_ATTR(iscsi_nacl_auth_, name)
...@@ -417,8 +413,7 @@ static ssize_t iscsi_nacl_auth_##name##_show(struct config_item *item, \ ...@@ -417,8 +413,7 @@ static ssize_t iscsi_nacl_auth_##name##_show(struct config_item *item, \
char *page) \ char *page) \
{ \ { \
struct se_node_acl *nacl = auth_to_nacl(item); \ struct se_node_acl *nacl = auth_to_nacl(item); \
return __iscsi_nacl_auth_##name##_show(container_of(nacl, \ return __iscsi_nacl_auth_##name##_show(to_iscsi_nacl(nacl), page); \
struct iscsi_node_acl, se_node_acl), page); \
} \ } \
\ \
CONFIGFS_ATTR_RO(iscsi_nacl_auth_, name) CONFIGFS_ATTR_RO(iscsi_nacl_auth_, name)
...@@ -623,8 +618,7 @@ static ssize_t lio_target_nacl_cmdsn_depth_store(struct config_item *item, ...@@ -623,8 +618,7 @@ static ssize_t lio_target_nacl_cmdsn_depth_store(struct config_item *item,
{ {
struct se_node_acl *se_nacl = acl_to_nacl(item); struct se_node_acl *se_nacl = acl_to_nacl(item);
struct se_portal_group *se_tpg = se_nacl->se_tpg; struct se_portal_group *se_tpg = se_nacl->se_tpg;
struct iscsi_portal_group *tpg = container_of(se_tpg, struct iscsi_portal_group *tpg = to_iscsi_tpg(se_tpg);
struct iscsi_portal_group, tpg_se_tpg);
struct config_item *acl_ci, *tpg_ci, *wwn_ci; struct config_item *acl_ci, *tpg_ci, *wwn_ci;
u32 cmdsn_depth = 0; u32 cmdsn_depth = 0;
int ret; int ret;
...@@ -700,8 +694,7 @@ static struct configfs_attribute *lio_target_initiator_attrs[] = { ...@@ -700,8 +694,7 @@ static struct configfs_attribute *lio_target_initiator_attrs[] = {
static int lio_target_init_nodeacl(struct se_node_acl *se_nacl, static int lio_target_init_nodeacl(struct se_node_acl *se_nacl,
const char *name) const char *name)
{ {
struct iscsi_node_acl *acl = struct iscsi_node_acl *acl = to_iscsi_nacl(se_nacl);
container_of(se_nacl, struct iscsi_node_acl, se_node_acl);
config_group_init_type_name(&acl->node_stat_grps.iscsi_sess_stats_group, config_group_init_type_name(&acl->node_stat_grps.iscsi_sess_stats_group,
"iscsi_sess_stats", &iscsi_stat_sess_cit); "iscsi_sess_stats", &iscsi_stat_sess_cit);
...@@ -720,8 +713,7 @@ static ssize_t iscsi_tpg_attrib_##name##_show(struct config_item *item, \ ...@@ -720,8 +713,7 @@ static ssize_t iscsi_tpg_attrib_##name##_show(struct config_item *item, \
char *page) \ char *page) \
{ \ { \
struct se_portal_group *se_tpg = attrib_to_tpg(item); \ struct se_portal_group *se_tpg = attrib_to_tpg(item); \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = to_iscsi_tpg(se_tpg); \
struct iscsi_portal_group, tpg_se_tpg); \
ssize_t rb; \ ssize_t rb; \
\ \
if (iscsit_get_tpg(tpg) < 0) \ if (iscsit_get_tpg(tpg) < 0) \
...@@ -736,8 +728,7 @@ static ssize_t iscsi_tpg_attrib_##name##_store(struct config_item *item,\ ...@@ -736,8 +728,7 @@ static ssize_t iscsi_tpg_attrib_##name##_store(struct config_item *item,\
const char *page, size_t count) \ const char *page, size_t count) \
{ \ { \
struct se_portal_group *se_tpg = attrib_to_tpg(item); \ struct se_portal_group *se_tpg = attrib_to_tpg(item); \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = to_iscsi_tpg(se_tpg); \
struct iscsi_portal_group, tpg_se_tpg); \
u32 val; \ u32 val; \
int ret; \ int ret; \
\ \
...@@ -800,8 +791,7 @@ static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { ...@@ -800,8 +791,7 @@ static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg, \ static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg, \
char *page) \ char *page) \
{ \ { \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = to_iscsi_tpg(se_tpg); \
struct iscsi_portal_group, tpg_se_tpg); \
struct iscsi_node_auth *auth = &tpg->tpg_demo_auth; \ struct iscsi_node_auth *auth = &tpg->tpg_demo_auth; \
\ \
if (!capable(CAP_SYS_ADMIN)) \ if (!capable(CAP_SYS_ADMIN)) \
...@@ -813,8 +803,7 @@ static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg, ...@@ -813,8 +803,7 @@ static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg,
static ssize_t __iscsi_##prefix##_##name##_store(struct se_portal_group *se_tpg,\ static ssize_t __iscsi_##prefix##_##name##_store(struct se_portal_group *se_tpg,\
const char *page, size_t count) \ const char *page, size_t count) \
{ \ { \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = to_iscsi_tpg(se_tpg); \
struct iscsi_portal_group, tpg_se_tpg); \
struct iscsi_node_auth *auth = &tpg->tpg_demo_auth; \ struct iscsi_node_auth *auth = &tpg->tpg_demo_auth; \
\ \
if (!capable(CAP_SYS_ADMIN)) \ if (!capable(CAP_SYS_ADMIN)) \
...@@ -861,8 +850,7 @@ DEF_TPG_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET); ...@@ -861,8 +850,7 @@ DEF_TPG_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg, \ static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg, \
char *page) \ char *page) \
{ \ { \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = to_iscsi_tpg(se_tpg); \
struct iscsi_portal_group, tpg_se_tpg); \
struct iscsi_node_auth *auth = &tpg->tpg_demo_auth; \ struct iscsi_node_auth *auth = &tpg->tpg_demo_auth; \
\ \
if (!capable(CAP_SYS_ADMIN)) \ if (!capable(CAP_SYS_ADMIN)) \
...@@ -900,8 +888,7 @@ static ssize_t iscsi_tpg_param_##name##_show(struct config_item *item, \ ...@@ -900,8 +888,7 @@ static ssize_t iscsi_tpg_param_##name##_show(struct config_item *item, \
char *page) \ char *page) \
{ \ { \
struct se_portal_group *se_tpg = param_to_tpg(item); \ struct se_portal_group *se_tpg = param_to_tpg(item); \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = to_iscsi_tpg(se_tpg); \
struct iscsi_portal_group, tpg_se_tpg); \
struct iscsi_param *param; \ struct iscsi_param *param; \
ssize_t rb; \ ssize_t rb; \
\ \
...@@ -923,8 +910,7 @@ static ssize_t iscsi_tpg_param_##name##_store(struct config_item *item, \ ...@@ -923,8 +910,7 @@ static ssize_t iscsi_tpg_param_##name##_store(struct config_item *item, \
const char *page, size_t count) \ const char *page, size_t count) \
{ \ { \
struct se_portal_group *se_tpg = param_to_tpg(item); \ struct se_portal_group *se_tpg = param_to_tpg(item); \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = to_iscsi_tpg(se_tpg); \
struct iscsi_portal_group, tpg_se_tpg); \
char *buf; \ char *buf; \
int ret, len; \ int ret, len; \
\ \
...@@ -1073,8 +1059,7 @@ static struct se_portal_group *lio_target_tiqn_addtpg(struct se_wwn *wwn, ...@@ -1073,8 +1059,7 @@ static struct se_portal_group *lio_target_tiqn_addtpg(struct se_wwn *wwn,
static int lio_target_tiqn_enabletpg(struct se_portal_group *se_tpg, static int lio_target_tiqn_enabletpg(struct se_portal_group *se_tpg,
bool enable) bool enable)
{ {
struct iscsi_portal_group *tpg = container_of(se_tpg, struct iscsi_portal_group *tpg = to_iscsi_tpg(se_tpg);
struct iscsi_portal_group, tpg_se_tpg);
int ret; int ret;
ret = iscsit_get_tpg(tpg); ret = iscsit_get_tpg(tpg);
...@@ -1106,7 +1091,7 @@ static void lio_target_tiqn_deltpg(struct se_portal_group *se_tpg) ...@@ -1106,7 +1091,7 @@ static void lio_target_tiqn_deltpg(struct se_portal_group *se_tpg)
struct iscsi_portal_group *tpg; struct iscsi_portal_group *tpg;
struct iscsi_tiqn *tiqn; struct iscsi_tiqn *tiqn;
tpg = container_of(se_tpg, struct iscsi_portal_group, tpg_se_tpg); tpg = to_iscsi_tpg(se_tpg);
tiqn = tpg->tpg_tiqn; tiqn = tpg->tpg_tiqn;
/* /*
* iscsit_tpg_del_portal_group() assumes force=1 * iscsit_tpg_del_portal_group() assumes force=1
...@@ -1416,46 +1401,41 @@ static void lio_aborted_task(struct se_cmd *se_cmd) ...@@ -1416,46 +1401,41 @@ static void lio_aborted_task(struct se_cmd *se_cmd)
cmd->conn->conn_transport->iscsit_aborted_task(cmd->conn, cmd); cmd->conn->conn_transport->iscsit_aborted_task(cmd->conn, cmd);
} }
static inline struct iscsi_portal_group *iscsi_tpg(struct se_portal_group *se_tpg)
{
return container_of(se_tpg, struct iscsi_portal_group, tpg_se_tpg);
}
static char *lio_tpg_get_endpoint_wwn(struct se_portal_group *se_tpg) static char *lio_tpg_get_endpoint_wwn(struct se_portal_group *se_tpg)
{ {
return iscsi_tpg(se_tpg)->tpg_tiqn->tiqn; return to_iscsi_tpg(se_tpg)->tpg_tiqn->tiqn;
} }
static u16 lio_tpg_get_tag(struct se_portal_group *se_tpg) static u16 lio_tpg_get_tag(struct se_portal_group *se_tpg)
{ {
return iscsi_tpg(se_tpg)->tpgt; return to_iscsi_tpg(se_tpg)->tpgt;
} }
static u32 lio_tpg_get_default_depth(struct se_portal_group *se_tpg) static u32 lio_tpg_get_default_depth(struct se_portal_group *se_tpg)
{ {
return iscsi_tpg(se_tpg)->tpg_attrib.default_cmdsn_depth; return to_iscsi_tpg(se_tpg)->tpg_attrib.default_cmdsn_depth;
} }
static int lio_tpg_check_demo_mode(struct se_portal_group *se_tpg) static int lio_tpg_check_demo_mode(struct se_portal_group *se_tpg)
{ {
return iscsi_tpg(se_tpg)->tpg_attrib.generate_node_acls; return to_iscsi_tpg(se_tpg)->tpg_attrib.generate_node_acls;
} }
static int lio_tpg_check_demo_mode_cache(struct se_portal_group *se_tpg) static int lio_tpg_check_demo_mode_cache(struct se_portal_group *se_tpg)
{ {
return iscsi_tpg(se_tpg)->tpg_attrib.cache_dynamic_acls; return to_iscsi_tpg(se_tpg)->tpg_attrib.cache_dynamic_acls;
} }
static int lio_tpg_check_demo_mode_write_protect( static int lio_tpg_check_demo_mode_write_protect(
struct se_portal_group *se_tpg) struct se_portal_group *se_tpg)
{ {
return iscsi_tpg(se_tpg)->tpg_attrib.demo_mode_write_protect; return to_iscsi_tpg(se_tpg)->tpg_attrib.demo_mode_write_protect;
} }
static int lio_tpg_check_prod_mode_write_protect( static int lio_tpg_check_prod_mode_write_protect(
struct se_portal_group *se_tpg) struct se_portal_group *se_tpg)
{ {
return iscsi_tpg(se_tpg)->tpg_attrib.prod_mode_write_protect; return to_iscsi_tpg(se_tpg)->tpg_attrib.prod_mode_write_protect;
} }
static int lio_tpg_check_prot_fabric_only( static int lio_tpg_check_prot_fabric_only(
...@@ -1465,9 +1445,9 @@ static int lio_tpg_check_prot_fabric_only( ...@@ -1465,9 +1445,9 @@ static int lio_tpg_check_prot_fabric_only(
* Only report fabric_prot_type if t10_pi has also been enabled * Only report fabric_prot_type if t10_pi has also been enabled
* for incoming ib_isert sessions. * for incoming ib_isert sessions.
*/ */
if (!iscsi_tpg(se_tpg)->tpg_attrib.t10_pi) if (!to_iscsi_tpg(se_tpg)->tpg_attrib.t10_pi)
return 0; return 0;
return iscsi_tpg(se_tpg)->tpg_attrib.fabric_prot_type; return to_iscsi_tpg(se_tpg)->tpg_attrib.fabric_prot_type;
} }
/* /*
...@@ -1504,16 +1484,14 @@ static void lio_tpg_close_session(struct se_session *se_sess) ...@@ -1504,16 +1484,14 @@ static void lio_tpg_close_session(struct se_session *se_sess)
static u32 lio_tpg_get_inst_index(struct se_portal_group *se_tpg) static u32 lio_tpg_get_inst_index(struct se_portal_group *se_tpg)
{ {
return iscsi_tpg(se_tpg)->tpg_tiqn->tiqn_index; return to_iscsi_tpg(se_tpg)->tpg_tiqn->tiqn_index;
} }
static void lio_set_default_node_attributes(struct se_node_acl *se_acl) 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, struct iscsi_node_acl *acl = to_iscsi_nacl(se_acl);
se_node_acl);
struct se_portal_group *se_tpg = se_acl->se_tpg; struct se_portal_group *se_tpg = se_acl->se_tpg;
struct iscsi_portal_group *tpg = container_of(se_tpg, struct iscsi_portal_group *tpg = to_iscsi_tpg(se_tpg);
struct iscsi_portal_group, tpg_se_tpg);
acl->node_attrib.nacl = acl; acl->node_attrib.nacl = acl;
iscsit_set_default_node_attribues(acl, tpg); iscsit_set_default_node_attribues(acl, tpg);
......
...@@ -104,8 +104,8 @@ static u32 iscsi_handle_authentication( ...@@ -104,8 +104,8 @@ static u32 iscsi_handle_authentication(
{ {
struct iscsit_session *sess = conn->sess; struct iscsit_session *sess = conn->sess;
struct iscsi_node_auth *auth; struct iscsi_node_auth *auth;
struct iscsi_node_acl *iscsi_nacl; struct iscsi_node_acl *nacl;
struct iscsi_portal_group *iscsi_tpg; struct iscsi_portal_group *tpg;
struct se_node_acl *se_nacl; struct se_node_acl *se_nacl;
if (!sess->sess_ops->SessionType) { if (!sess->sess_ops->SessionType) {
...@@ -120,15 +120,13 @@ static u32 iscsi_handle_authentication( ...@@ -120,15 +120,13 @@ static u32 iscsi_handle_authentication(
} }
if (se_nacl->dynamic_node_acl) { if (se_nacl->dynamic_node_acl) {
iscsi_tpg = container_of(se_nacl->se_tpg, tpg = to_iscsi_tpg(se_nacl->se_tpg);
struct iscsi_portal_group, tpg_se_tpg);
auth = &iscsi_tpg->tpg_demo_auth; auth = &tpg->tpg_demo_auth;
} else { } else {
iscsi_nacl = container_of(se_nacl, struct iscsi_node_acl, nacl = to_iscsi_nacl(se_nacl);
se_node_acl);
auth = &iscsi_nacl->node_auth; auth = &nacl->node_auth;
} }
} else { } else {
/* /*
......
...@@ -394,8 +394,7 @@ struct iscsi_node_attrib *iscsit_tpg_get_node_attrib( ...@@ -394,8 +394,7 @@ struct iscsi_node_attrib *iscsit_tpg_get_node_attrib(
{ {
struct se_session *se_sess = sess->se_sess; struct se_session *se_sess = sess->se_sess;
struct se_node_acl *se_nacl = se_sess->se_node_acl; struct se_node_acl *se_nacl = se_sess->se_node_acl;
struct iscsi_node_acl *acl = container_of(se_nacl, struct iscsi_node_acl, struct iscsi_node_acl *acl = to_iscsi_nacl(se_nacl);
se_node_acl);
return &acl->node_attrib; return &acl->node_attrib;
} }
......
...@@ -758,6 +758,12 @@ struct iscsi_node_acl { ...@@ -758,6 +758,12 @@ struct iscsi_node_acl {
struct iscsi_node_stat_grps node_stat_grps; struct iscsi_node_stat_grps node_stat_grps;
}; };
static inline struct iscsi_node_acl *
to_iscsi_nacl(struct se_node_acl *se_nacl)
{
return container_of(se_nacl, struct iscsi_node_acl, se_node_acl);
}
struct iscsi_tpg_attrib { struct iscsi_tpg_attrib {
u32 authentication; u32 authentication;
u32 login_timeout; u32 login_timeout;
...@@ -839,6 +845,12 @@ struct iscsi_portal_group { ...@@ -839,6 +845,12 @@ struct iscsi_portal_group {
struct list_head tpg_list; struct list_head tpg_list;
} ____cacheline_aligned; } ____cacheline_aligned;
static inline struct iscsi_portal_group *
to_iscsi_tpg(struct se_portal_group *se_tpg)
{
return container_of(se_tpg, struct iscsi_portal_group, tpg_se_tpg);
}
struct iscsi_wwn_stat_grps { struct iscsi_wwn_stat_grps {
struct config_group iscsi_stat_group; struct config_group iscsi_stat_group;
struct config_group iscsi_instance_group; struct config_group iscsi_instance_group;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment