Commit 2eafd729 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Nicholas Bellinger

target: use per-attribute show and store methods

This also allows to remove the target-specific old configfs macros, and
gets rid of the target_core_fabric_configfs.h header which only had one
function declaration left that could be moved to a better place.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
Acked-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 64c6be0e
...@@ -203,8 +203,6 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name): ...@@ -203,8 +203,6 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name):
buf += "#include <scsi/scsi_proto.h>\n\n" buf += "#include <scsi/scsi_proto.h>\n\n"
buf += "#include <target/target_core_base.h>\n" buf += "#include <target/target_core_base.h>\n"
buf += "#include <target/target_core_fabric.h>\n" buf += "#include <target/target_core_fabric.h>\n"
buf += "#include <target/target_core_fabric_configfs.h>\n"
buf += "#include <target/configfs_macros.h>\n\n"
buf += "#include \"" + fabric_mod_name + "_base.h\"\n" buf += "#include \"" + fabric_mod_name + "_base.h\"\n"
buf += "#include \"" + fabric_mod_name + "_fabric.h\"\n\n" buf += "#include \"" + fabric_mod_name + "_fabric.h\"\n\n"
...@@ -283,19 +281,6 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name): ...@@ -283,19 +281,6 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name):
buf += " struct " + fabric_mod_name + "_" + fabric_mod_port + ", " + fabric_mod_port + "_wwn);\n" buf += " struct " + fabric_mod_name + "_" + fabric_mod_port + ", " + fabric_mod_port + "_wwn);\n"
buf += " kfree(" + fabric_mod_port + ");\n" buf += " kfree(" + fabric_mod_port + ");\n"
buf += "}\n\n" buf += "}\n\n"
buf += "static ssize_t " + fabric_mod_name + "_wwn_show_attr_version(\n"
buf += " struct target_fabric_configfs *tf,\n"
buf += " char *page)\n"
buf += "{\n"
buf += " return sprintf(page, \"" + fabric_mod_name.upper() + " fabric module %s on %s/%s\"\n"
buf += " \"on \"UTS_RELEASE\"\\n\", " + fabric_mod_name.upper() + "_VERSION, utsname()->sysname,\n"
buf += " utsname()->machine);\n"
buf += "}\n\n"
buf += "TF_WWN_ATTR_RO(" + fabric_mod_name + ", version);\n\n"
buf += "static struct configfs_attribute *" + fabric_mod_name + "_wwn_attrs[] = {\n"
buf += " &" + fabric_mod_name + "_wwn_version.attr,\n"
buf += " NULL,\n"
buf += "};\n\n"
buf += "static const struct target_core_fabric_ops " + fabric_mod_name + "_ops = {\n" buf += "static const struct target_core_fabric_ops " + fabric_mod_name + "_ops = {\n"
buf += " .module = THIS_MODULE,\n" buf += " .module = THIS_MODULE,\n"
...@@ -328,8 +313,6 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name): ...@@ -328,8 +313,6 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name):
buf += " .fabric_drop_wwn = " + fabric_mod_name + "_drop_" + fabric_mod_port + ",\n" buf += " .fabric_drop_wwn = " + fabric_mod_name + "_drop_" + fabric_mod_port + ",\n"
buf += " .fabric_make_tpg = " + fabric_mod_name + "_make_tpg,\n" buf += " .fabric_make_tpg = " + fabric_mod_name + "_make_tpg,\n"
buf += " .fabric_drop_tpg = " + fabric_mod_name + "_drop_tpg,\n" buf += " .fabric_drop_tpg = " + fabric_mod_name + "_drop_tpg,\n"
buf += "\n"
buf += " .tfc_wwn_attrs = " + fabric_mod_name + "_wwn_attrs,\n"
buf += "};\n\n" buf += "};\n\n"
buf += "static int __init " + fabric_mod_name + "_init(void)\n" buf += "static int __init " + fabric_mod_name + "_init(void)\n"
......
...@@ -43,9 +43,7 @@ ...@@ -43,9 +43,7 @@
#include <linux/atomic.h> #include <linux/atomic.h>
#include <scsi/scsi_proto.h> #include <scsi/scsi_proto.h>
#include <scsi/scsi_tcq.h> #include <scsi/scsi_tcq.h>
#include <target/configfs_macros.h>
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric_configfs.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include "ib_srpt.h" #include "ib_srpt.h"
...@@ -3545,20 +3543,19 @@ static void srpt_cleanup_nodeacl(struct se_node_acl *se_nacl) ...@@ -3545,20 +3543,19 @@ static void srpt_cleanup_nodeacl(struct se_node_acl *se_nacl)
spin_unlock_irq(&sport->port_acl_lock); spin_unlock_irq(&sport->port_acl_lock);
} }
static ssize_t srpt_tpg_attrib_show_srp_max_rdma_size( static ssize_t srpt_tpg_attrib_srp_max_rdma_size_show(struct config_item *item,
struct se_portal_group *se_tpg, char *page)
char *page)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
return sprintf(page, "%u\n", sport->port_attrib.srp_max_rdma_size); return sprintf(page, "%u\n", sport->port_attrib.srp_max_rdma_size);
} }
static ssize_t srpt_tpg_attrib_store_srp_max_rdma_size( static ssize_t srpt_tpg_attrib_srp_max_rdma_size_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
unsigned long val; unsigned long val;
int ret; int ret;
...@@ -3583,22 +3580,19 @@ static ssize_t srpt_tpg_attrib_store_srp_max_rdma_size( ...@@ -3583,22 +3580,19 @@ static ssize_t srpt_tpg_attrib_store_srp_max_rdma_size(
return count; return count;
} }
TF_TPG_ATTRIB_ATTR(srpt, srp_max_rdma_size, S_IRUGO | S_IWUSR); static ssize_t srpt_tpg_attrib_srp_max_rsp_size_show(struct config_item *item,
char *page)
static ssize_t srpt_tpg_attrib_show_srp_max_rsp_size(
struct se_portal_group *se_tpg,
char *page)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
return sprintf(page, "%u\n", sport->port_attrib.srp_max_rsp_size); return sprintf(page, "%u\n", sport->port_attrib.srp_max_rsp_size);
} }
static ssize_t srpt_tpg_attrib_store_srp_max_rsp_size( static ssize_t srpt_tpg_attrib_srp_max_rsp_size_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
unsigned long val; unsigned long val;
int ret; int ret;
...@@ -3623,22 +3617,19 @@ static ssize_t srpt_tpg_attrib_store_srp_max_rsp_size( ...@@ -3623,22 +3617,19 @@ static ssize_t srpt_tpg_attrib_store_srp_max_rsp_size(
return count; return count;
} }
TF_TPG_ATTRIB_ATTR(srpt, srp_max_rsp_size, S_IRUGO | S_IWUSR); static ssize_t srpt_tpg_attrib_srp_sq_size_show(struct config_item *item,
char *page)
static ssize_t srpt_tpg_attrib_show_srp_sq_size(
struct se_portal_group *se_tpg,
char *page)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
return sprintf(page, "%u\n", sport->port_attrib.srp_sq_size); return sprintf(page, "%u\n", sport->port_attrib.srp_sq_size);
} }
static ssize_t srpt_tpg_attrib_store_srp_sq_size( static ssize_t srpt_tpg_attrib_srp_sq_size_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
unsigned long val; unsigned long val;
int ret; int ret;
...@@ -3663,29 +3654,29 @@ static ssize_t srpt_tpg_attrib_store_srp_sq_size( ...@@ -3663,29 +3654,29 @@ static ssize_t srpt_tpg_attrib_store_srp_sq_size(
return count; return count;
} }
TF_TPG_ATTRIB_ATTR(srpt, srp_sq_size, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(srpt_tpg_attrib_, srp_max_rdma_size);
CONFIGFS_ATTR(srpt_tpg_attrib_, srp_max_rsp_size);
CONFIGFS_ATTR(srpt_tpg_attrib_, srp_sq_size);
static struct configfs_attribute *srpt_tpg_attrib_attrs[] = { static struct configfs_attribute *srpt_tpg_attrib_attrs[] = {
&srpt_tpg_attrib_srp_max_rdma_size.attr, &srpt_tpg_attrib_attr_srp_max_rdma_size,
&srpt_tpg_attrib_srp_max_rsp_size.attr, &srpt_tpg_attrib_attr_srp_max_rsp_size,
&srpt_tpg_attrib_srp_sq_size.attr, &srpt_tpg_attrib_attr_srp_sq_size,
NULL, NULL,
}; };
static ssize_t srpt_tpg_show_enable( static ssize_t srpt_tpg_enable_show(struct config_item *item, char *page)
struct se_portal_group *se_tpg,
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
return snprintf(page, PAGE_SIZE, "%d\n", (sport->enabled) ? 1: 0); return snprintf(page, PAGE_SIZE, "%d\n", (sport->enabled) ? 1: 0);
} }
static ssize_t srpt_tpg_store_enable( static ssize_t srpt_tpg_enable_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
unsigned long tmp; unsigned long tmp;
int ret; int ret;
...@@ -3708,10 +3699,10 @@ static ssize_t srpt_tpg_store_enable( ...@@ -3708,10 +3699,10 @@ static ssize_t srpt_tpg_store_enable(
return count; return count;
} }
TF_TPG_BASE_ATTR(srpt, enable, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(srpt_tpg_, enable);
static struct configfs_attribute *srpt_tpg_attrs[] = { static struct configfs_attribute *srpt_tpg_attrs[] = {
&srpt_tpg_enable.attr, &srpt_tpg_attr_enable,
NULL, NULL,
}; };
...@@ -3781,16 +3772,15 @@ static void srpt_drop_tport(struct se_wwn *wwn) ...@@ -3781,16 +3772,15 @@ static void srpt_drop_tport(struct se_wwn *wwn)
pr_debug("drop_tport(%s\n", config_item_name(&sport->port_wwn.wwn_group.cg_item)); pr_debug("drop_tport(%s\n", config_item_name(&sport->port_wwn.wwn_group.cg_item));
} }
static ssize_t srpt_wwn_show_attr_version(struct target_fabric_configfs *tf, static ssize_t srpt_wwn_version_show(struct config_item *item, char *buf)
char *buf)
{ {
return scnprintf(buf, PAGE_SIZE, "%s\n", DRV_VERSION); return scnprintf(buf, PAGE_SIZE, "%s\n", DRV_VERSION);
} }
TF_WWN_ATTR_RO(srpt, version); CONFIGFS_ATTR_RO(srpt_wwn_, version);
static struct configfs_attribute *srpt_wwn_attrs[] = { static struct configfs_attribute *srpt_wwn_attrs[] = {
&srpt_wwn_version.attr, &srpt_wwn_attr_version,
NULL, NULL,
}; };
......
...@@ -43,8 +43,6 @@ ...@@ -43,8 +43,6 @@
#include <scsi/scsi_cmnd.h> #include <scsi/scsi_cmnd.h>
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/target_core_fabric_configfs.h>
#include <target/configfs_macros.h>
#include "qla_def.h" #include "qla_def.h"
#include "qla_target.h" #include "qla_target.h"
...@@ -729,23 +727,23 @@ static int tcm_qla2xxx_init_nodeacl(struct se_node_acl *se_nacl, ...@@ -729,23 +727,23 @@ static int tcm_qla2xxx_init_nodeacl(struct se_node_acl *se_nacl,
#define DEF_QLA_TPG_ATTRIB(name) \ #define DEF_QLA_TPG_ATTRIB(name) \
\ \
static ssize_t tcm_qla2xxx_tpg_attrib_show_##name( \ static ssize_t tcm_qla2xxx_tpg_attrib_##name##_show( \
struct se_portal_group *se_tpg, \ struct config_item *item, char *page) \
char *page) \
{ \ { \
struct se_portal_group *se_tpg = attrib_to_tpg(item); \
struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, \ struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, \
struct tcm_qla2xxx_tpg, se_tpg); \ struct tcm_qla2xxx_tpg, se_tpg); \
\ \
return sprintf(page, "%u\n", tpg->tpg_attrib.name); \ return sprintf(page, "%u\n", tpg->tpg_attrib.name); \
} \ } \
\ \
static ssize_t tcm_qla2xxx_tpg_attrib_store_##name( \ static ssize_t tcm_qla2xxx_tpg_attrib_##name##_store( \
struct se_portal_group *se_tpg, \ 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 tcm_qla2xxx_tpg *tpg = container_of(se_tpg, \ struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, \
struct tcm_qla2xxx_tpg, se_tpg); \ struct tcm_qla2xxx_tpg, se_tpg); \
struct tcm_qla2xxx_tpg_attrib *a = &tpg->tpg_attrib; \
unsigned long val; \ unsigned long val; \
int ret; \ int ret; \
\ \
...@@ -755,81 +753,39 @@ static ssize_t tcm_qla2xxx_tpg_attrib_store_##name( \ ...@@ -755,81 +753,39 @@ static ssize_t tcm_qla2xxx_tpg_attrib_store_##name( \
" ret: %d\n", ret); \ " ret: %d\n", ret); \
return -EINVAL; \ return -EINVAL; \
} \ } \
ret = tcm_qla2xxx_set_attrib_##name(tpg, val); \
\
return (!ret) ? count : -EINVAL; \
}
#define DEF_QLA_TPG_ATTR_BOOL(_name) \
\
static int tcm_qla2xxx_set_attrib_##_name( \
struct tcm_qla2xxx_tpg *tpg, \
unsigned long val) \
{ \
struct tcm_qla2xxx_tpg_attrib *a = &tpg->tpg_attrib; \
\ \
if ((val != 0) && (val != 1)) { \ if ((val != 0) && (val != 1)) { \
pr_err("Illegal boolean value %lu\n", val); \ pr_err("Illegal boolean value %lu\n", val); \
return -EINVAL; \ return -EINVAL; \
} \ } \
\ \
a->_name = val; \ a->name = val; \
return 0; \ \
} return count; \
} \
#define QLA_TPG_ATTR(_name, _mode) \ CONFIGFS_ATTR(tcm_qla2xxx_tpg_attrib_, name)
TF_TPG_ATTRIB_ATTR(tcm_qla2xxx, _name, _mode);
/*
* Define tcm_qla2xxx_tpg_attrib_s_generate_node_acls
*/
DEF_QLA_TPG_ATTR_BOOL(generate_node_acls);
DEF_QLA_TPG_ATTRIB(generate_node_acls); DEF_QLA_TPG_ATTRIB(generate_node_acls);
QLA_TPG_ATTR(generate_node_acls, S_IRUGO | S_IWUSR);
/*
Define tcm_qla2xxx_attrib_s_cache_dynamic_acls
*/
DEF_QLA_TPG_ATTR_BOOL(cache_dynamic_acls);
DEF_QLA_TPG_ATTRIB(cache_dynamic_acls); DEF_QLA_TPG_ATTRIB(cache_dynamic_acls);
QLA_TPG_ATTR(cache_dynamic_acls, S_IRUGO | S_IWUSR);
/*
* Define tcm_qla2xxx_tpg_attrib_s_demo_mode_write_protect
*/
DEF_QLA_TPG_ATTR_BOOL(demo_mode_write_protect);
DEF_QLA_TPG_ATTRIB(demo_mode_write_protect); DEF_QLA_TPG_ATTRIB(demo_mode_write_protect);
QLA_TPG_ATTR(demo_mode_write_protect, S_IRUGO | S_IWUSR);
/*
* Define tcm_qla2xxx_tpg_attrib_s_prod_mode_write_protect
*/
DEF_QLA_TPG_ATTR_BOOL(prod_mode_write_protect);
DEF_QLA_TPG_ATTRIB(prod_mode_write_protect); DEF_QLA_TPG_ATTRIB(prod_mode_write_protect);
QLA_TPG_ATTR(prod_mode_write_protect, S_IRUGO | S_IWUSR);
/*
* Define tcm_qla2xxx_tpg_attrib_s_demo_mode_login_only
*/
DEF_QLA_TPG_ATTR_BOOL(demo_mode_login_only);
DEF_QLA_TPG_ATTRIB(demo_mode_login_only); DEF_QLA_TPG_ATTRIB(demo_mode_login_only);
QLA_TPG_ATTR(demo_mode_login_only, S_IRUGO | S_IWUSR);
static struct configfs_attribute *tcm_qla2xxx_tpg_attrib_attrs[] = { static struct configfs_attribute *tcm_qla2xxx_tpg_attrib_attrs[] = {
&tcm_qla2xxx_tpg_attrib_generate_node_acls.attr, &tcm_qla2xxx_tpg_attrib_attr_generate_node_acls,
&tcm_qla2xxx_tpg_attrib_cache_dynamic_acls.attr, &tcm_qla2xxx_tpg_attrib_attr_cache_dynamic_acls,
&tcm_qla2xxx_tpg_attrib_demo_mode_write_protect.attr, &tcm_qla2xxx_tpg_attrib_attr_demo_mode_write_protect,
&tcm_qla2xxx_tpg_attrib_prod_mode_write_protect.attr, &tcm_qla2xxx_tpg_attrib_attr_prod_mode_write_protect,
&tcm_qla2xxx_tpg_attrib_demo_mode_login_only.attr, &tcm_qla2xxx_tpg_attrib_attr_demo_mode_login_only,
NULL, NULL,
}; };
/* End items for tcm_qla2xxx_tpg_attrib_cit */ /* End items for tcm_qla2xxx_tpg_attrib_cit */
static ssize_t tcm_qla2xxx_tpg_show_enable( static ssize_t tcm_qla2xxx_tpg_enable_show(struct config_item *item,
struct se_portal_group *se_tpg, char *page)
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
struct tcm_qla2xxx_tpg, se_tpg); struct tcm_qla2xxx_tpg, se_tpg);
...@@ -865,11 +821,10 @@ static void tcm_qla2xxx_undepend_tpg(struct work_struct *work) ...@@ -865,11 +821,10 @@ static void tcm_qla2xxx_undepend_tpg(struct work_struct *work)
complete(&base_tpg->tpg_base_comp); complete(&base_tpg->tpg_base_comp);
} }
static ssize_t tcm_qla2xxx_tpg_store_enable( static ssize_t tcm_qla2xxx_tpg_enable_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
struct tcm_qla2xxx_tpg, se_tpg); struct tcm_qla2xxx_tpg, se_tpg);
unsigned long op; unsigned long op;
...@@ -909,22 +864,16 @@ static ssize_t tcm_qla2xxx_tpg_store_enable( ...@@ -909,22 +864,16 @@ static ssize_t tcm_qla2xxx_tpg_store_enable(
return count; return count;
} }
TF_TPG_BASE_ATTR(tcm_qla2xxx, enable, S_IRUGO | S_IWUSR); static ssize_t tcm_qla2xxx_tpg_dynamic_sessions_show(struct config_item *item,
char *page)
static ssize_t tcm_qla2xxx_tpg_show_dynamic_sessions(
struct se_portal_group *se_tpg,
char *page)
{ {
return target_show_dynamic_sessions(se_tpg, page); return target_show_dynamic_sessions(to_tpg(item), page);
} }
TF_TPG_BASE_ATTR_RO(tcm_qla2xxx, dynamic_sessions); static ssize_t tcm_qla2xxx_tpg_fabric_prot_type_store(struct config_item *item,
const char *page, size_t count)
static ssize_t tcm_qla2xxx_tpg_store_fabric_prot_type(
struct se_portal_group *se_tpg,
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
struct tcm_qla2xxx_tpg, se_tpg); struct tcm_qla2xxx_tpg, se_tpg);
unsigned long val; unsigned long val;
...@@ -943,21 +892,24 @@ static ssize_t tcm_qla2xxx_tpg_store_fabric_prot_type( ...@@ -943,21 +892,24 @@ static ssize_t tcm_qla2xxx_tpg_store_fabric_prot_type(
return count; return count;
} }
static ssize_t tcm_qla2xxx_tpg_show_fabric_prot_type( static ssize_t tcm_qla2xxx_tpg_fabric_prot_type_show(struct config_item *item,
struct se_portal_group *se_tpg, char *page)
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
struct tcm_qla2xxx_tpg, se_tpg); struct tcm_qla2xxx_tpg, se_tpg);
return sprintf(page, "%d\n", tpg->tpg_attrib.fabric_prot_type); return sprintf(page, "%d\n", tpg->tpg_attrib.fabric_prot_type);
} }
TF_TPG_BASE_ATTR(tcm_qla2xxx, fabric_prot_type, S_IRUGO | S_IWUSR);
CONFIGFS_ATTR_WO(tcm_qla2xxx_tpg_, enable);
CONFIGFS_ATTR_RO(tcm_qla2xxx_tpg_, dynamic_sessions);
CONFIGFS_ATTR(tcm_qla2xxx_tpg_, fabric_prot_type);
static struct configfs_attribute *tcm_qla2xxx_tpg_attrs[] = { static struct configfs_attribute *tcm_qla2xxx_tpg_attrs[] = {
&tcm_qla2xxx_tpg_enable.attr, &tcm_qla2xxx_tpg_attr_enable,
&tcm_qla2xxx_tpg_dynamic_sessions.attr, &tcm_qla2xxx_tpg_attr_dynamic_sessions,
&tcm_qla2xxx_tpg_fabric_prot_type.attr, &tcm_qla2xxx_tpg_attr_fabric_prot_type,
NULL, NULL,
}; };
...@@ -1030,18 +982,16 @@ static void tcm_qla2xxx_drop_tpg(struct se_portal_group *se_tpg) ...@@ -1030,18 +982,16 @@ static void tcm_qla2xxx_drop_tpg(struct se_portal_group *se_tpg)
kfree(tpg); kfree(tpg);
} }
static ssize_t tcm_qla2xxx_npiv_tpg_show_enable( static ssize_t tcm_qla2xxx_npiv_tpg_enable_show(struct config_item *item,
struct se_portal_group *se_tpg, char *page)
char *page)
{ {
return tcm_qla2xxx_tpg_show_enable(se_tpg, page); return tcm_qla2xxx_tpg_enable_show(item, page);
} }
static ssize_t tcm_qla2xxx_npiv_tpg_store_enable( static ssize_t tcm_qla2xxx_npiv_tpg_enable_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct se_wwn *se_wwn = se_tpg->se_tpg_wwn; struct se_wwn *se_wwn = se_tpg->se_tpg_wwn;
struct tcm_qla2xxx_lport *lport = container_of(se_wwn, struct tcm_qla2xxx_lport *lport = container_of(se_wwn,
struct tcm_qla2xxx_lport, lport_wwn); struct tcm_qla2xxx_lport, lport_wwn);
...@@ -1077,10 +1027,10 @@ static ssize_t tcm_qla2xxx_npiv_tpg_store_enable( ...@@ -1077,10 +1027,10 @@ static ssize_t tcm_qla2xxx_npiv_tpg_store_enable(
return count; return count;
} }
TF_TPG_BASE_ATTR(tcm_qla2xxx_npiv, enable, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(tcm_qla2xxx_npiv_tpg_, enable);
static struct configfs_attribute *tcm_qla2xxx_npiv_tpg_attrs[] = { static struct configfs_attribute *tcm_qla2xxx_npiv_tpg_attrs[] = {
&tcm_qla2xxx_npiv_tpg_enable.attr, &tcm_qla2xxx_npiv_tpg_attr_enable,
NULL, NULL,
}; };
...@@ -1783,9 +1733,8 @@ static void tcm_qla2xxx_npiv_drop_lport(struct se_wwn *wwn) ...@@ -1783,9 +1733,8 @@ static void tcm_qla2xxx_npiv_drop_lport(struct se_wwn *wwn)
} }
static ssize_t tcm_qla2xxx_wwn_show_attr_version( static ssize_t tcm_qla2xxx_wwn_version_show(struct config_item *item,
struct target_fabric_configfs *tf, char *page)
char *page)
{ {
return sprintf(page, return sprintf(page,
"TCM QLOGIC QLA2XXX NPIV capable fabric module %s on %s/%s on " "TCM QLOGIC QLA2XXX NPIV capable fabric module %s on %s/%s on "
...@@ -1793,10 +1742,10 @@ static ssize_t tcm_qla2xxx_wwn_show_attr_version( ...@@ -1793,10 +1742,10 @@ static ssize_t tcm_qla2xxx_wwn_show_attr_version(
utsname()->machine); utsname()->machine);
} }
TF_WWN_ATTR_RO(tcm_qla2xxx, version); CONFIGFS_ATTR_RO(tcm_qla2xxx_wwn_, version);
static struct configfs_attribute *tcm_qla2xxx_wwn_attrs[] = { static struct configfs_attribute *tcm_qla2xxx_wwn_attrs[] = {
&tcm_qla2xxx_wwn_version.attr, &tcm_qla2xxx_wwn_attr_version,
NULL, NULL,
}; };
......
...@@ -23,8 +23,6 @@ ...@@ -23,8 +23,6 @@
#include <linux/inet.h> #include <linux/inet.h>
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/target_core_fabric_configfs.h>
#include <target/configfs_macros.h>
#include <target/iscsi/iscsi_transport.h> #include <target/iscsi/iscsi_transport.h>
#include <target/iscsi/iscsi_target_core.h> #include <target/iscsi/iscsi_target_core.h>
...@@ -37,20 +35,17 @@ ...@@ -37,20 +35,17 @@
#include "iscsi_target.h" #include "iscsi_target.h"
#include <target/iscsi/iscsi_target_stat.h> #include <target/iscsi/iscsi_target_stat.h>
struct lio_target_configfs_attribute {
struct configfs_attribute attr;
ssize_t (*show)(void *, char *);
ssize_t (*store)(void *, const char *, size_t);
};
/* Start items for lio_target_portal_cit */ /* Start items for lio_target_portal_cit */
static ssize_t lio_target_np_show_sctp( static inline struct iscsi_tpg_np *to_iscsi_tpg_np(struct config_item *item)
struct se_tpg_np *se_tpg_np, {
char *page) return container_of(to_tpg_np(item), struct iscsi_tpg_np, se_tpg_np);
}
static ssize_t lio_target_np_sctp_show(struct config_item *item, char *page)
{ {
struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np, struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
struct iscsi_tpg_np, se_tpg_np);
struct iscsi_tpg_np *tpg_np_sctp; struct iscsi_tpg_np *tpg_np_sctp;
ssize_t rb; ssize_t rb;
...@@ -63,15 +58,12 @@ static ssize_t lio_target_np_show_sctp( ...@@ -63,15 +58,12 @@ static ssize_t lio_target_np_show_sctp(
return rb; return rb;
} }
static ssize_t lio_target_np_store_sctp( static ssize_t lio_target_np_sctp_store(struct config_item *item,
struct se_tpg_np *se_tpg_np, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
struct iscsi_np *np; struct iscsi_np *np;
struct iscsi_portal_group *tpg; struct iscsi_portal_group *tpg;
struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np,
struct iscsi_tpg_np, se_tpg_np);
struct iscsi_tpg_np *tpg_np_sctp = NULL; struct iscsi_tpg_np *tpg_np_sctp = NULL;
u32 op; u32 op;
int ret; int ret;
...@@ -119,14 +111,9 @@ static ssize_t lio_target_np_store_sctp( ...@@ -119,14 +111,9 @@ static ssize_t lio_target_np_store_sctp(
return -EINVAL; return -EINVAL;
} }
TF_NP_BASE_ATTR(lio_target, sctp, S_IRUGO | S_IWUSR); static ssize_t lio_target_np_iser_show(struct config_item *item, char *page)
static ssize_t lio_target_np_show_iser(
struct se_tpg_np *se_tpg_np,
char *page)
{ {
struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np, struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
struct iscsi_tpg_np, se_tpg_np);
struct iscsi_tpg_np *tpg_np_iser; struct iscsi_tpg_np *tpg_np_iser;
ssize_t rb; ssize_t rb;
...@@ -139,15 +126,12 @@ static ssize_t lio_target_np_show_iser( ...@@ -139,15 +126,12 @@ static ssize_t lio_target_np_show_iser(
return rb; return rb;
} }
static ssize_t lio_target_np_store_iser( static ssize_t lio_target_np_iser_store(struct config_item *item,
struct se_tpg_np *se_tpg_np, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
struct iscsi_np *np; struct iscsi_np *np;
struct iscsi_portal_group *tpg; struct iscsi_portal_group *tpg;
struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np,
struct iscsi_tpg_np, se_tpg_np);
struct iscsi_tpg_np *tpg_np_iser = NULL; struct iscsi_tpg_np *tpg_np_iser = NULL;
char *endptr; char *endptr;
u32 op; u32 op;
...@@ -198,11 +182,12 @@ static ssize_t lio_target_np_store_iser( ...@@ -198,11 +182,12 @@ static ssize_t lio_target_np_store_iser(
return rc; return rc;
} }
TF_NP_BASE_ATTR(lio_target, iser, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(lio_target_np_, sctp);
CONFIGFS_ATTR(lio_target_np_, iser);
static struct configfs_attribute *lio_target_portal_attrs[] = { static struct configfs_attribute *lio_target_portal_attrs[] = {
&lio_target_np_sctp.attr, &lio_target_np_attr_sctp,
&lio_target_np_iser.attr, &lio_target_np_attr_iser,
NULL, NULL,
}; };
...@@ -360,22 +345,21 @@ static void lio_target_call_delnpfromtpg( ...@@ -360,22 +345,21 @@ static void lio_target_call_delnpfromtpg(
/* Start items for lio_target_nacl_attrib_cit */ /* Start items for lio_target_nacl_attrib_cit */
#define DEF_NACL_ATTRIB(name) \ #define ISCSI_NACL_ATTR(name) \
static ssize_t iscsi_nacl_attrib_show_##name( \ static ssize_t iscsi_nacl_attrib_##name##_show(struct config_item *item,\
struct se_node_acl *se_nacl, \ char *page) \
char *page) \
{ \ { \
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 = container_of(se_nacl, struct iscsi_node_acl, \
se_node_acl); \ se_node_acl); \
\ \
return sprintf(page, "%u\n", nacl->node_attrib.name); \ return sprintf(page, "%u\n", nacl->node_attrib.name); \
} \ } \
\ \
static ssize_t iscsi_nacl_attrib_store_##name( \ static ssize_t iscsi_nacl_attrib_##name##_store(struct config_item *item,\
struct se_node_acl *se_nacl, \ const char *page, size_t count) \
const char *page, \
size_t count) \
{ \ { \
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 = container_of(se_nacl, struct iscsi_node_acl, \
se_node_acl); \ se_node_acl); \
u32 val; \ u32 val; \
...@@ -389,59 +373,28 @@ static ssize_t iscsi_nacl_attrib_store_##name( \ ...@@ -389,59 +373,28 @@ static ssize_t iscsi_nacl_attrib_store_##name( \
return ret; \ return ret; \
\ \
return count; \ return count; \
} } \
\
CONFIGFS_ATTR(iscsi_nacl_attrib_, name)
#define NACL_ATTR(_name, _mode) TF_NACL_ATTRIB_ATTR(iscsi, _name, _mode); ISCSI_NACL_ATTR(dataout_timeout);
/* ISCSI_NACL_ATTR(dataout_timeout_retries);
* Define iscsi_node_attrib_s_dataout_timeout ISCSI_NACL_ATTR(default_erl);
*/ ISCSI_NACL_ATTR(nopin_timeout);
DEF_NACL_ATTRIB(dataout_timeout); ISCSI_NACL_ATTR(nopin_response_timeout);
NACL_ATTR(dataout_timeout, S_IRUGO | S_IWUSR); ISCSI_NACL_ATTR(random_datain_pdu_offsets);
/* ISCSI_NACL_ATTR(random_datain_seq_offsets);
* Define iscsi_node_attrib_s_dataout_timeout_retries ISCSI_NACL_ATTR(random_r2t_offsets);
*/
DEF_NACL_ATTRIB(dataout_timeout_retries);
NACL_ATTR(dataout_timeout_retries, S_IRUGO | S_IWUSR);
/*
* Define iscsi_node_attrib_s_default_erl
*/
DEF_NACL_ATTRIB(default_erl);
NACL_ATTR(default_erl, S_IRUGO | S_IWUSR);
/*
* Define iscsi_node_attrib_s_nopin_timeout
*/
DEF_NACL_ATTRIB(nopin_timeout);
NACL_ATTR(nopin_timeout, S_IRUGO | S_IWUSR);
/*
* Define iscsi_node_attrib_s_nopin_response_timeout
*/
DEF_NACL_ATTRIB(nopin_response_timeout);
NACL_ATTR(nopin_response_timeout, S_IRUGO | S_IWUSR);
/*
* Define iscsi_node_attrib_s_random_datain_pdu_offsets
*/
DEF_NACL_ATTRIB(random_datain_pdu_offsets);
NACL_ATTR(random_datain_pdu_offsets, S_IRUGO | S_IWUSR);
/*
* Define iscsi_node_attrib_s_random_datain_seq_offsets
*/
DEF_NACL_ATTRIB(random_datain_seq_offsets);
NACL_ATTR(random_datain_seq_offsets, S_IRUGO | S_IWUSR);
/*
* Define iscsi_node_attrib_s_random_r2t_offsets
*/
DEF_NACL_ATTRIB(random_r2t_offsets);
NACL_ATTR(random_r2t_offsets, S_IRUGO | S_IWUSR);
static struct configfs_attribute *lio_target_nacl_attrib_attrs[] = { static struct configfs_attribute *lio_target_nacl_attrib_attrs[] = {
&iscsi_nacl_attrib_dataout_timeout.attr, &iscsi_nacl_attrib_attr_dataout_timeout,
&iscsi_nacl_attrib_dataout_timeout_retries.attr, &iscsi_nacl_attrib_attr_dataout_timeout_retries,
&iscsi_nacl_attrib_default_erl.attr, &iscsi_nacl_attrib_attr_default_erl,
&iscsi_nacl_attrib_nopin_timeout.attr, &iscsi_nacl_attrib_attr_nopin_timeout,
&iscsi_nacl_attrib_nopin_response_timeout.attr, &iscsi_nacl_attrib_attr_nopin_response_timeout,
&iscsi_nacl_attrib_random_datain_pdu_offsets.attr, &iscsi_nacl_attrib_attr_random_datain_pdu_offsets,
&iscsi_nacl_attrib_random_datain_seq_offsets.attr, &iscsi_nacl_attrib_attr_random_datain_seq_offsets,
&iscsi_nacl_attrib_random_r2t_offsets.attr, &iscsi_nacl_attrib_attr_random_r2t_offsets,
NULL, NULL,
}; };
...@@ -450,7 +403,7 @@ static struct configfs_attribute *lio_target_nacl_attrib_attrs[] = { ...@@ -450,7 +403,7 @@ static struct configfs_attribute *lio_target_nacl_attrib_attrs[] = {
/* Start items for lio_target_nacl_auth_cit */ /* Start items for lio_target_nacl_auth_cit */
#define __DEF_NACL_AUTH_STR(prefix, name, flags) \ #define __DEF_NACL_AUTH_STR(prefix, name, flags) \
static ssize_t __iscsi_##prefix##_show_##name( \ static ssize_t __iscsi_##prefix##_##name##_show( \
struct iscsi_node_acl *nacl, \ struct iscsi_node_acl *nacl, \
char *page) \ char *page) \
{ \ { \
...@@ -461,7 +414,7 @@ static ssize_t __iscsi_##prefix##_show_##name( \ ...@@ -461,7 +414,7 @@ static ssize_t __iscsi_##prefix##_show_##name( \
return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \ return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \
} \ } \
\ \
static ssize_t __iscsi_##prefix##_store_##name( \ static ssize_t __iscsi_##prefix##_##name##_store( \
struct iscsi_node_acl *nacl, \ struct iscsi_node_acl *nacl, \
const char *page, \ const char *page, \
size_t count) \ size_t count) \
...@@ -487,8 +440,35 @@ static ssize_t __iscsi_##prefix##_store_##name( \ ...@@ -487,8 +440,35 @@ static ssize_t __iscsi_##prefix##_store_##name( \
return count; \ return count; \
} }
#define DEF_NACL_AUTH_STR(name, flags) \
__DEF_NACL_AUTH_STR(nacl_auth, name, flags) \
static ssize_t iscsi_nacl_auth_##name##_show(struct config_item *item, \
char *page) \
{ \
struct se_node_acl *nacl = auth_to_nacl(item); \
return __iscsi_nacl_auth_##name##_show(container_of(nacl, \
struct iscsi_node_acl, se_node_acl), page); \
} \
static ssize_t iscsi_nacl_auth_##name##_store(struct config_item *item, \
const char *page, size_t count) \
{ \
struct se_node_acl *nacl = auth_to_nacl(item); \
return __iscsi_nacl_auth_##name##_store(container_of(nacl, \
struct iscsi_node_acl, se_node_acl), page, count); \
} \
\
CONFIGFS_ATTR(iscsi_nacl_auth_, name)
/*
* One-way authentication userid
*/
DEF_NACL_AUTH_STR(userid, NAF_USERID_SET);
DEF_NACL_AUTH_STR(password, NAF_PASSWORD_SET);
DEF_NACL_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
DEF_NACL_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
#define __DEF_NACL_AUTH_INT(prefix, name) \ #define __DEF_NACL_AUTH_INT(prefix, name) \
static ssize_t __iscsi_##prefix##_show_##name( \ static ssize_t __iscsi_##prefix##_##name##_show( \
struct iscsi_node_acl *nacl, \ struct iscsi_node_acl *nacl, \
char *page) \ char *page) \
{ \ { \
...@@ -500,69 +480,26 @@ static ssize_t __iscsi_##prefix##_show_##name( \ ...@@ -500,69 +480,26 @@ static ssize_t __iscsi_##prefix##_show_##name( \
return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \ return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \
} }
#define DEF_NACL_AUTH_STR(name, flags) \
__DEF_NACL_AUTH_STR(nacl_auth, name, flags) \
static ssize_t iscsi_nacl_auth_show_##name( \
struct se_node_acl *nacl, \
char *page) \
{ \
return __iscsi_nacl_auth_show_##name(container_of(nacl, \
struct iscsi_node_acl, se_node_acl), page); \
} \
static ssize_t iscsi_nacl_auth_store_##name( \
struct se_node_acl *nacl, \
const char *page, \
size_t count) \
{ \
return __iscsi_nacl_auth_store_##name(container_of(nacl, \
struct iscsi_node_acl, se_node_acl), page, count); \
}
#define DEF_NACL_AUTH_INT(name) \ #define DEF_NACL_AUTH_INT(name) \
__DEF_NACL_AUTH_INT(nacl_auth, name) \ __DEF_NACL_AUTH_INT(nacl_auth, name) \
static ssize_t iscsi_nacl_auth_show_##name( \ static ssize_t iscsi_nacl_auth_##name##_show(struct config_item *item, \
struct se_node_acl *nacl, \ char *page) \
char *page) \
{ \ { \
return __iscsi_nacl_auth_show_##name(container_of(nacl, \ struct se_node_acl *nacl = auth_to_nacl(item); \
struct iscsi_node_acl, se_node_acl), page); \ return __iscsi_nacl_auth_##name##_show(container_of(nacl, \
} struct iscsi_node_acl, se_node_acl), page); \
} \
#define AUTH_ATTR(_name, _mode) TF_NACL_AUTH_ATTR(iscsi, _name, _mode); \
#define AUTH_ATTR_RO(_name) TF_NACL_AUTH_ATTR_RO(iscsi, _name); CONFIGFS_ATTR_RO(iscsi_nacl_auth_, name)
/*
* One-way authentication userid
*/
DEF_NACL_AUTH_STR(userid, NAF_USERID_SET);
AUTH_ATTR(userid, S_IRUGO | S_IWUSR);
/*
* One-way authentication password
*/
DEF_NACL_AUTH_STR(password, NAF_PASSWORD_SET);
AUTH_ATTR(password, S_IRUGO | S_IWUSR);
/*
* Enforce mutual authentication
*/
DEF_NACL_AUTH_INT(authenticate_target); DEF_NACL_AUTH_INT(authenticate_target);
AUTH_ATTR_RO(authenticate_target);
/*
* Mutual authentication userid
*/
DEF_NACL_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
AUTH_ATTR(userid_mutual, S_IRUGO | S_IWUSR);
/*
* Mutual authentication password
*/
DEF_NACL_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
AUTH_ATTR(password_mutual, S_IRUGO | S_IWUSR);
static struct configfs_attribute *lio_target_nacl_auth_attrs[] = { static struct configfs_attribute *lio_target_nacl_auth_attrs[] = {
&iscsi_nacl_auth_userid.attr, &iscsi_nacl_auth_attr_userid,
&iscsi_nacl_auth_password.attr, &iscsi_nacl_auth_attr_password,
&iscsi_nacl_auth_authenticate_target.attr, &iscsi_nacl_auth_attr_authenticate_target,
&iscsi_nacl_auth_userid_mutual.attr, &iscsi_nacl_auth_attr_userid_mutual,
&iscsi_nacl_auth_password_mutual.attr, &iscsi_nacl_auth_attr_password_mutual,
NULL, NULL,
}; };
...@@ -570,11 +507,11 @@ static struct configfs_attribute *lio_target_nacl_auth_attrs[] = { ...@@ -570,11 +507,11 @@ static struct configfs_attribute *lio_target_nacl_auth_attrs[] = {
/* Start items for lio_target_nacl_param_cit */ /* Start items for lio_target_nacl_param_cit */
#define DEF_NACL_PARAM(name) \ #define ISCSI_NACL_PARAM(name) \
static ssize_t iscsi_nacl_param_show_##name( \ static ssize_t iscsi_nacl_param_##name##_show(struct config_item *item, \
struct se_node_acl *se_nacl, \ char *page) \
char *page) \
{ \ { \
struct se_node_acl *se_nacl = param_to_nacl(item); \
struct iscsi_session *sess; \ struct iscsi_session *sess; \
struct se_session *se_sess; \ struct se_session *se_sess; \
ssize_t rb; \ ssize_t rb; \
...@@ -592,55 +529,34 @@ static ssize_t iscsi_nacl_param_show_##name( \ ...@@ -592,55 +529,34 @@ static ssize_t iscsi_nacl_param_show_##name( \
spin_unlock_bh(&se_nacl->nacl_sess_lock); \ spin_unlock_bh(&se_nacl->nacl_sess_lock); \
\ \
return rb; \ return rb; \
} } \
\
#define NACL_PARAM_ATTR(_name) TF_NACL_PARAM_ATTR_RO(iscsi, _name); CONFIGFS_ATTR_RO(iscsi_nacl_param_, name)
DEF_NACL_PARAM(MaxConnections); ISCSI_NACL_PARAM(MaxConnections);
NACL_PARAM_ATTR(MaxConnections); ISCSI_NACL_PARAM(InitialR2T);
ISCSI_NACL_PARAM(ImmediateData);
DEF_NACL_PARAM(InitialR2T); ISCSI_NACL_PARAM(MaxBurstLength);
NACL_PARAM_ATTR(InitialR2T); ISCSI_NACL_PARAM(FirstBurstLength);
ISCSI_NACL_PARAM(DefaultTime2Wait);
DEF_NACL_PARAM(ImmediateData); ISCSI_NACL_PARAM(DefaultTime2Retain);
NACL_PARAM_ATTR(ImmediateData); ISCSI_NACL_PARAM(MaxOutstandingR2T);
ISCSI_NACL_PARAM(DataPDUInOrder);
DEF_NACL_PARAM(MaxBurstLength); ISCSI_NACL_PARAM(DataSequenceInOrder);
NACL_PARAM_ATTR(MaxBurstLength); ISCSI_NACL_PARAM(ErrorRecoveryLevel);
DEF_NACL_PARAM(FirstBurstLength);
NACL_PARAM_ATTR(FirstBurstLength);
DEF_NACL_PARAM(DefaultTime2Wait);
NACL_PARAM_ATTR(DefaultTime2Wait);
DEF_NACL_PARAM(DefaultTime2Retain);
NACL_PARAM_ATTR(DefaultTime2Retain);
DEF_NACL_PARAM(MaxOutstandingR2T);
NACL_PARAM_ATTR(MaxOutstandingR2T);
DEF_NACL_PARAM(DataPDUInOrder);
NACL_PARAM_ATTR(DataPDUInOrder);
DEF_NACL_PARAM(DataSequenceInOrder);
NACL_PARAM_ATTR(DataSequenceInOrder);
DEF_NACL_PARAM(ErrorRecoveryLevel);
NACL_PARAM_ATTR(ErrorRecoveryLevel);
static struct configfs_attribute *lio_target_nacl_param_attrs[] = { static struct configfs_attribute *lio_target_nacl_param_attrs[] = {
&iscsi_nacl_param_MaxConnections.attr, &iscsi_nacl_param_attr_MaxConnections,
&iscsi_nacl_param_InitialR2T.attr, &iscsi_nacl_param_attr_InitialR2T,
&iscsi_nacl_param_ImmediateData.attr, &iscsi_nacl_param_attr_ImmediateData,
&iscsi_nacl_param_MaxBurstLength.attr, &iscsi_nacl_param_attr_MaxBurstLength,
&iscsi_nacl_param_FirstBurstLength.attr, &iscsi_nacl_param_attr_FirstBurstLength,
&iscsi_nacl_param_DefaultTime2Wait.attr, &iscsi_nacl_param_attr_DefaultTime2Wait,
&iscsi_nacl_param_DefaultTime2Retain.attr, &iscsi_nacl_param_attr_DefaultTime2Retain,
&iscsi_nacl_param_MaxOutstandingR2T.attr, &iscsi_nacl_param_attr_MaxOutstandingR2T,
&iscsi_nacl_param_DataPDUInOrder.attr, &iscsi_nacl_param_attr_DataPDUInOrder,
&iscsi_nacl_param_DataSequenceInOrder.attr, &iscsi_nacl_param_attr_DataSequenceInOrder,
&iscsi_nacl_param_ErrorRecoveryLevel.attr, &iscsi_nacl_param_attr_ErrorRecoveryLevel,
NULL, NULL,
}; };
...@@ -648,10 +564,9 @@ static struct configfs_attribute *lio_target_nacl_param_attrs[] = { ...@@ -648,10 +564,9 @@ static struct configfs_attribute *lio_target_nacl_param_attrs[] = {
/* Start items for lio_target_acl_cit */ /* Start items for lio_target_acl_cit */
static ssize_t lio_target_nacl_show_info( static ssize_t lio_target_nacl_info_show(struct config_item *item, char *page)
struct se_node_acl *se_nacl,
char *page)
{ {
struct se_node_acl *se_nacl = acl_to_nacl(item);
struct iscsi_session *sess; struct iscsi_session *sess;
struct iscsi_conn *conn; struct iscsi_conn *conn;
struct se_session *se_sess; struct se_session *se_sess;
...@@ -766,20 +681,16 @@ static ssize_t lio_target_nacl_show_info( ...@@ -766,20 +681,16 @@ static ssize_t lio_target_nacl_show_info(
return rb; return rb;
} }
TF_NACL_BASE_ATTR_RO(lio_target, info); static ssize_t lio_target_nacl_cmdsn_depth_show(struct config_item *item,
char *page)
static ssize_t lio_target_nacl_show_cmdsn_depth(
struct se_node_acl *se_nacl,
char *page)
{ {
return sprintf(page, "%u\n", se_nacl->queue_depth); return sprintf(page, "%u\n", acl_to_nacl(item)->queue_depth);
} }
static ssize_t lio_target_nacl_store_cmdsn_depth( static ssize_t lio_target_nacl_cmdsn_depth_store(struct config_item *item,
struct se_node_acl *se_nacl, const char *page, size_t count)
const char *page,
size_t count)
{ {
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 = container_of(se_tpg,
struct iscsi_portal_group, tpg_se_tpg); struct iscsi_portal_group, tpg_se_tpg);
...@@ -829,20 +740,15 @@ static ssize_t lio_target_nacl_store_cmdsn_depth( ...@@ -829,20 +740,15 @@ static ssize_t lio_target_nacl_store_cmdsn_depth(
return (!ret) ? count : (ssize_t)ret; return (!ret) ? count : (ssize_t)ret;
} }
TF_NACL_BASE_ATTR(lio_target, cmdsn_depth, S_IRUGO | S_IWUSR); static ssize_t lio_target_nacl_tag_show(struct config_item *item, char *page)
static ssize_t lio_target_nacl_show_tag(
struct se_node_acl *se_nacl,
char *page)
{ {
return snprintf(page, PAGE_SIZE, "%s", se_nacl->acl_tag); return snprintf(page, PAGE_SIZE, "%s", acl_to_nacl(item)->acl_tag);
} }
static ssize_t lio_target_nacl_store_tag( static ssize_t lio_target_nacl_tag_store(struct config_item *item,
struct se_node_acl *se_nacl, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_node_acl *se_nacl = acl_to_nacl(item);
int ret; int ret;
ret = core_tpg_set_initiator_node_tag(se_nacl->se_tpg, se_nacl, page); ret = core_tpg_set_initiator_node_tag(se_nacl->se_tpg, se_nacl, page);
...@@ -852,12 +758,14 @@ static ssize_t lio_target_nacl_store_tag( ...@@ -852,12 +758,14 @@ static ssize_t lio_target_nacl_store_tag(
return count; return count;
} }
TF_NACL_BASE_ATTR(lio_target, tag, S_IRUGO | S_IWUSR); CONFIGFS_ATTR_RO(lio_target_nacl_, info);
CONFIGFS_ATTR(lio_target_nacl_, cmdsn_depth);
CONFIGFS_ATTR(lio_target_nacl_, tag);
static struct configfs_attribute *lio_target_initiator_attrs[] = { static struct configfs_attribute *lio_target_initiator_attrs[] = {
&lio_target_nacl_info.attr, &lio_target_nacl_attr_info,
&lio_target_nacl_cmdsn_depth.attr, &lio_target_nacl_attr_cmdsn_depth,
&lio_target_nacl_tag.attr, &lio_target_nacl_attr_tag,
NULL, NULL,
}; };
...@@ -907,10 +815,10 @@ static void lio_target_cleanup_nodeacl( struct se_node_acl *se_nacl) ...@@ -907,10 +815,10 @@ static void lio_target_cleanup_nodeacl( struct se_node_acl *se_nacl)
#define DEF_TPG_ATTRIB(name) \ #define DEF_TPG_ATTRIB(name) \
\ \
static ssize_t iscsi_tpg_attrib_show_##name( \ static ssize_t iscsi_tpg_attrib_##name##_show(struct config_item *item, \
struct se_portal_group *se_tpg, \ char *page) \
char *page) \
{ \ { \
struct se_portal_group *se_tpg = attrib_to_tpg(item); \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = container_of(se_tpg, \
struct iscsi_portal_group, tpg_se_tpg); \ struct iscsi_portal_group, tpg_se_tpg); \
ssize_t rb; \ ssize_t rb; \
...@@ -923,11 +831,10 @@ static ssize_t iscsi_tpg_attrib_show_##name( \ ...@@ -923,11 +831,10 @@ static ssize_t iscsi_tpg_attrib_show_##name( \
return rb; \ return rb; \
} \ } \
\ \
static ssize_t iscsi_tpg_attrib_store_##name( \ static ssize_t iscsi_tpg_attrib_##name##_store(struct config_item *item,\
struct se_portal_group *se_tpg, \ const char *page, size_t count) \
const char *page, \
size_t count) \
{ \ { \
struct se_portal_group *se_tpg = attrib_to_tpg(item); \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = container_of(se_tpg, \
struct iscsi_portal_group, tpg_se_tpg); \ struct iscsi_portal_group, tpg_se_tpg); \
u32 val; \ u32 val; \
...@@ -948,90 +855,37 @@ static ssize_t iscsi_tpg_attrib_store_##name( \ ...@@ -948,90 +855,37 @@ static ssize_t iscsi_tpg_attrib_store_##name( \
out: \ out: \
iscsit_put_tpg(tpg); \ iscsit_put_tpg(tpg); \
return ret; \ return ret; \
} } \
CONFIGFS_ATTR(iscsi_tpg_attrib_, name)
#define TPG_ATTR(_name, _mode) TF_TPG_ATTRIB_ATTR(iscsi, _name, _mode);
/*
* Define iscsi_tpg_attrib_s_authentication
*/
DEF_TPG_ATTRIB(authentication); DEF_TPG_ATTRIB(authentication);
TPG_ATTR(authentication, S_IRUGO | S_IWUSR);
/*
* Define iscsi_tpg_attrib_s_login_timeout
*/
DEF_TPG_ATTRIB(login_timeout); DEF_TPG_ATTRIB(login_timeout);
TPG_ATTR(login_timeout, S_IRUGO | S_IWUSR);
/*
* Define iscsi_tpg_attrib_s_netif_timeout
*/
DEF_TPG_ATTRIB(netif_timeout); DEF_TPG_ATTRIB(netif_timeout);
TPG_ATTR(netif_timeout, S_IRUGO | S_IWUSR);
/*
* Define iscsi_tpg_attrib_s_generate_node_acls
*/
DEF_TPG_ATTRIB(generate_node_acls); DEF_TPG_ATTRIB(generate_node_acls);
TPG_ATTR(generate_node_acls, S_IRUGO | S_IWUSR);
/*
* Define iscsi_tpg_attrib_s_default_cmdsn_depth
*/
DEF_TPG_ATTRIB(default_cmdsn_depth); DEF_TPG_ATTRIB(default_cmdsn_depth);
TPG_ATTR(default_cmdsn_depth, S_IRUGO | S_IWUSR);
/*
Define iscsi_tpg_attrib_s_cache_dynamic_acls
*/
DEF_TPG_ATTRIB(cache_dynamic_acls); DEF_TPG_ATTRIB(cache_dynamic_acls);
TPG_ATTR(cache_dynamic_acls, S_IRUGO | S_IWUSR);
/*
* Define iscsi_tpg_attrib_s_demo_mode_write_protect
*/
DEF_TPG_ATTRIB(demo_mode_write_protect); DEF_TPG_ATTRIB(demo_mode_write_protect);
TPG_ATTR(demo_mode_write_protect, S_IRUGO | S_IWUSR);
/*
* Define iscsi_tpg_attrib_s_prod_mode_write_protect
*/
DEF_TPG_ATTRIB(prod_mode_write_protect); DEF_TPG_ATTRIB(prod_mode_write_protect);
TPG_ATTR(prod_mode_write_protect, S_IRUGO | S_IWUSR);
/*
* Define iscsi_tpg_attrib_s_demo_mode_discovery,
*/
DEF_TPG_ATTRIB(demo_mode_discovery); 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); DEF_TPG_ATTRIB(default_erl);
TPG_ATTR(default_erl, S_IRUGO | S_IWUSR);
/*
* Define iscsi_tpg_attrib_s_t10_pi
*/
DEF_TPG_ATTRIB(t10_pi); DEF_TPG_ATTRIB(t10_pi);
TPG_ATTR(t10_pi, S_IRUGO | S_IWUSR);
/*
* Define iscsi_tpg_attrib_s_fabric_prot_type
*/
DEF_TPG_ATTRIB(fabric_prot_type); DEF_TPG_ATTRIB(fabric_prot_type);
TPG_ATTR(fabric_prot_type, S_IRUGO | S_IWUSR);
/*
* Define iscsi_tpg_attrib_s_tpg_enabled_sendtargets
*/
DEF_TPG_ATTRIB(tpg_enabled_sendtargets); DEF_TPG_ATTRIB(tpg_enabled_sendtargets);
TPG_ATTR(tpg_enabled_sendtargets, S_IRUGO | S_IWUSR);
static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
&iscsi_tpg_attrib_authentication.attr, &iscsi_tpg_attrib_attr_authentication,
&iscsi_tpg_attrib_login_timeout.attr, &iscsi_tpg_attrib_attr_login_timeout,
&iscsi_tpg_attrib_netif_timeout.attr, &iscsi_tpg_attrib_attr_netif_timeout,
&iscsi_tpg_attrib_generate_node_acls.attr, &iscsi_tpg_attrib_attr_generate_node_acls,
&iscsi_tpg_attrib_default_cmdsn_depth.attr, &iscsi_tpg_attrib_attr_default_cmdsn_depth,
&iscsi_tpg_attrib_cache_dynamic_acls.attr, &iscsi_tpg_attrib_attr_cache_dynamic_acls,
&iscsi_tpg_attrib_demo_mode_write_protect.attr, &iscsi_tpg_attrib_attr_demo_mode_write_protect,
&iscsi_tpg_attrib_prod_mode_write_protect.attr, &iscsi_tpg_attrib_attr_prod_mode_write_protect,
&iscsi_tpg_attrib_demo_mode_discovery.attr, &iscsi_tpg_attrib_attr_demo_mode_discovery,
&iscsi_tpg_attrib_default_erl.attr, &iscsi_tpg_attrib_attr_default_erl,
&iscsi_tpg_attrib_t10_pi.attr, &iscsi_tpg_attrib_attr_t10_pi,
&iscsi_tpg_attrib_fabric_prot_type.attr, &iscsi_tpg_attrib_attr_fabric_prot_type,
&iscsi_tpg_attrib_tpg_enabled_sendtargets.attr, &iscsi_tpg_attrib_attr_tpg_enabled_sendtargets,
NULL, NULL,
}; };
...@@ -1040,9 +894,8 @@ static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { ...@@ -1040,9 +894,8 @@ static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
/* Start items for lio_target_tpg_auth_cit */ /* Start items for lio_target_tpg_auth_cit */
#define __DEF_TPG_AUTH_STR(prefix, name, flags) \ #define __DEF_TPG_AUTH_STR(prefix, name, flags) \
static ssize_t __iscsi_##prefix##_show_##name( \ static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg, \
struct se_portal_group *se_tpg, \ char *page) \
char *page) \
{ \ { \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = container_of(se_tpg, \
struct iscsi_portal_group, tpg_se_tpg); \ struct iscsi_portal_group, tpg_se_tpg); \
...@@ -1054,10 +907,8 @@ static ssize_t __iscsi_##prefix##_show_##name( \ ...@@ -1054,10 +907,8 @@ static ssize_t __iscsi_##prefix##_show_##name( \
return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \ return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \
} \ } \
\ \
static ssize_t __iscsi_##prefix##_store_##name( \ static ssize_t __iscsi_##prefix##_##name##_store(struct se_portal_group *se_tpg,\
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 = container_of(se_tpg, \
struct iscsi_portal_group, tpg_se_tpg); \ struct iscsi_portal_group, tpg_se_tpg); \
...@@ -1081,10 +932,31 @@ static ssize_t __iscsi_##prefix##_store_##name( \ ...@@ -1081,10 +932,31 @@ static ssize_t __iscsi_##prefix##_store_##name( \
return count; \ return count; \
} }
#define DEF_TPG_AUTH_STR(name, flags) \
__DEF_TPG_AUTH_STR(tpg_auth, name, flags) \
static ssize_t iscsi_tpg_auth_##name##_show(struct config_item *item, \
char *page) \
{ \
return __iscsi_tpg_auth_##name##_show(auth_to_tpg(item), page); \
} \
\
static ssize_t iscsi_tpg_auth_##name##_store(struct config_item *item, \
const char *page, size_t count) \
{ \
return __iscsi_tpg_auth_##name##_store(auth_to_tpg(item), page, count); \
} \
\
CONFIGFS_ATTR(iscsi_tpg_auth_, name);
DEF_TPG_AUTH_STR(userid, NAF_USERID_SET);
DEF_TPG_AUTH_STR(password, NAF_PASSWORD_SET);
DEF_TPG_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
DEF_TPG_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
#define __DEF_TPG_AUTH_INT(prefix, name) \ #define __DEF_TPG_AUTH_INT(prefix, name) \
static ssize_t __iscsi_##prefix##_show_##name( \ static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg, \
struct se_portal_group *se_tpg, \ char *page) \
char *page) \
{ \ { \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = container_of(se_tpg, \
struct iscsi_portal_group, tpg_se_tpg); \ struct iscsi_portal_group, tpg_se_tpg); \
...@@ -1096,67 +968,23 @@ static ssize_t __iscsi_##prefix##_show_##name( \ ...@@ -1096,67 +968,23 @@ static ssize_t __iscsi_##prefix##_show_##name( \
return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \ return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \
} }
#define DEF_TPG_AUTH_STR(name, flags) \
__DEF_TPG_AUTH_STR(tpg_auth, name, flags) \
static ssize_t iscsi_tpg_auth_show_##name( \
struct se_portal_group *se_tpg, \
char *page) \
{ \
return __iscsi_tpg_auth_show_##name(se_tpg, page); \
} \
\
static ssize_t iscsi_tpg_auth_store_##name( \
struct se_portal_group *se_tpg, \
const char *page, \
size_t count) \
{ \
return __iscsi_tpg_auth_store_##name(se_tpg, page, count); \
}
#define DEF_TPG_AUTH_INT(name) \ #define DEF_TPG_AUTH_INT(name) \
__DEF_TPG_AUTH_INT(tpg_auth, name) \ __DEF_TPG_AUTH_INT(tpg_auth, name) \
static ssize_t iscsi_tpg_auth_show_##name( \ static ssize_t iscsi_tpg_auth_##name##_show(struct config_item *item, \
struct se_portal_group *se_tpg, \ char *page) \
char *page) \
{ \ { \
return __iscsi_tpg_auth_show_##name(se_tpg, page); \ return __iscsi_tpg_auth_##name##_show(auth_to_tpg(item), page); \
} } \
CONFIGFS_ATTR_RO(iscsi_tpg_auth_, name);
#define TPG_AUTH_ATTR(_name, _mode) TF_TPG_AUTH_ATTR(iscsi, _name, _mode);
#define TPG_AUTH_ATTR_RO(_name) TF_TPG_AUTH_ATTR_RO(iscsi, _name);
/*
* * One-way authentication userid
* */
DEF_TPG_AUTH_STR(userid, NAF_USERID_SET);
TPG_AUTH_ATTR(userid, S_IRUGO | S_IWUSR);
/*
* * One-way authentication password
* */
DEF_TPG_AUTH_STR(password, NAF_PASSWORD_SET);
TPG_AUTH_ATTR(password, S_IRUGO | S_IWUSR);
/*
* * Enforce mutual authentication
* */
DEF_TPG_AUTH_INT(authenticate_target); DEF_TPG_AUTH_INT(authenticate_target);
TPG_AUTH_ATTR_RO(authenticate_target);
/*
* * Mutual authentication userid
* */
DEF_TPG_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
TPG_AUTH_ATTR(userid_mutual, S_IRUGO | S_IWUSR);
/*
* * Mutual authentication password
* */
DEF_TPG_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
TPG_AUTH_ATTR(password_mutual, S_IRUGO | S_IWUSR);
static struct configfs_attribute *lio_target_tpg_auth_attrs[] = { static struct configfs_attribute *lio_target_tpg_auth_attrs[] = {
&iscsi_tpg_auth_userid.attr, &iscsi_tpg_auth_attr_userid,
&iscsi_tpg_auth_password.attr, &iscsi_tpg_auth_attr_password,
&iscsi_tpg_auth_authenticate_target.attr, &iscsi_tpg_auth_attr_authenticate_target,
&iscsi_tpg_auth_userid_mutual.attr, &iscsi_tpg_auth_attr_userid_mutual,
&iscsi_tpg_auth_password_mutual.attr, &iscsi_tpg_auth_attr_password_mutual,
NULL, NULL,
}; };
...@@ -1165,10 +993,10 @@ static struct configfs_attribute *lio_target_tpg_auth_attrs[] = { ...@@ -1165,10 +993,10 @@ static struct configfs_attribute *lio_target_tpg_auth_attrs[] = {
/* Start items for lio_target_tpg_param_cit */ /* Start items for lio_target_tpg_param_cit */
#define DEF_TPG_PARAM(name) \ #define DEF_TPG_PARAM(name) \
static ssize_t iscsi_tpg_param_show_##name( \ static ssize_t iscsi_tpg_param_##name##_show(struct config_item *item, \
struct se_portal_group *se_tpg, \ char *page) \
char *page) \
{ \ { \
struct se_portal_group *se_tpg = param_to_tpg(item); \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = container_of(se_tpg, \
struct iscsi_portal_group, tpg_se_tpg); \ struct iscsi_portal_group, tpg_se_tpg); \
struct iscsi_param *param; \ struct iscsi_param *param; \
...@@ -1188,11 +1016,10 @@ static ssize_t iscsi_tpg_param_show_##name( \ ...@@ -1188,11 +1016,10 @@ static ssize_t iscsi_tpg_param_show_##name( \
iscsit_put_tpg(tpg); \ iscsit_put_tpg(tpg); \
return rb; \ return rb; \
} \ } \
static ssize_t iscsi_tpg_param_store_##name( \ static ssize_t iscsi_tpg_param_##name##_store(struct config_item *item, \
struct se_portal_group *se_tpg, \ const char *page, size_t count) \
const char *page, \
size_t count) \
{ \ { \
struct se_portal_group *se_tpg = param_to_tpg(item); \
struct iscsi_portal_group *tpg = container_of(se_tpg, \ struct iscsi_portal_group *tpg = container_of(se_tpg, \
struct iscsi_portal_group, tpg_se_tpg); \ struct iscsi_portal_group, tpg_se_tpg); \
char *buf; \ char *buf; \
...@@ -1220,96 +1047,54 @@ static ssize_t iscsi_tpg_param_store_##name( \ ...@@ -1220,96 +1047,54 @@ static ssize_t iscsi_tpg_param_store_##name( \
out: \ out: \
kfree(buf); \ kfree(buf); \
iscsit_put_tpg(tpg); \ iscsit_put_tpg(tpg); \
return -EINVAL; \ return -EINVAL; \
} } \
CONFIGFS_ATTR(iscsi_tpg_param_, name)
#define TPG_PARAM_ATTR(_name, _mode) TF_TPG_PARAM_ATTR(iscsi, _name, _mode);
DEF_TPG_PARAM(AuthMethod); DEF_TPG_PARAM(AuthMethod);
TPG_PARAM_ATTR(AuthMethod, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(HeaderDigest); DEF_TPG_PARAM(HeaderDigest);
TPG_PARAM_ATTR(HeaderDigest, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(DataDigest); DEF_TPG_PARAM(DataDigest);
TPG_PARAM_ATTR(DataDigest, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(MaxConnections); DEF_TPG_PARAM(MaxConnections);
TPG_PARAM_ATTR(MaxConnections, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(TargetAlias); DEF_TPG_PARAM(TargetAlias);
TPG_PARAM_ATTR(TargetAlias, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(InitialR2T); DEF_TPG_PARAM(InitialR2T);
TPG_PARAM_ATTR(InitialR2T, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(ImmediateData); DEF_TPG_PARAM(ImmediateData);
TPG_PARAM_ATTR(ImmediateData, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(MaxRecvDataSegmentLength); DEF_TPG_PARAM(MaxRecvDataSegmentLength);
TPG_PARAM_ATTR(MaxRecvDataSegmentLength, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(MaxXmitDataSegmentLength); DEF_TPG_PARAM(MaxXmitDataSegmentLength);
TPG_PARAM_ATTR(MaxXmitDataSegmentLength, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(MaxBurstLength); DEF_TPG_PARAM(MaxBurstLength);
TPG_PARAM_ATTR(MaxBurstLength, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(FirstBurstLength); DEF_TPG_PARAM(FirstBurstLength);
TPG_PARAM_ATTR(FirstBurstLength, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(DefaultTime2Wait); DEF_TPG_PARAM(DefaultTime2Wait);
TPG_PARAM_ATTR(DefaultTime2Wait, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(DefaultTime2Retain); DEF_TPG_PARAM(DefaultTime2Retain);
TPG_PARAM_ATTR(DefaultTime2Retain, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(MaxOutstandingR2T); DEF_TPG_PARAM(MaxOutstandingR2T);
TPG_PARAM_ATTR(MaxOutstandingR2T, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(DataPDUInOrder); DEF_TPG_PARAM(DataPDUInOrder);
TPG_PARAM_ATTR(DataPDUInOrder, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(DataSequenceInOrder); DEF_TPG_PARAM(DataSequenceInOrder);
TPG_PARAM_ATTR(DataSequenceInOrder, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(ErrorRecoveryLevel); DEF_TPG_PARAM(ErrorRecoveryLevel);
TPG_PARAM_ATTR(ErrorRecoveryLevel, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(IFMarker); DEF_TPG_PARAM(IFMarker);
TPG_PARAM_ATTR(IFMarker, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(OFMarker); DEF_TPG_PARAM(OFMarker);
TPG_PARAM_ATTR(OFMarker, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(IFMarkInt); DEF_TPG_PARAM(IFMarkInt);
TPG_PARAM_ATTR(IFMarkInt, S_IRUGO | S_IWUSR);
DEF_TPG_PARAM(OFMarkInt); DEF_TPG_PARAM(OFMarkInt);
TPG_PARAM_ATTR(OFMarkInt, S_IRUGO | S_IWUSR);
static struct configfs_attribute *lio_target_tpg_param_attrs[] = { static struct configfs_attribute *lio_target_tpg_param_attrs[] = {
&iscsi_tpg_param_AuthMethod.attr, &iscsi_tpg_param_attr_AuthMethod,
&iscsi_tpg_param_HeaderDigest.attr, &iscsi_tpg_param_attr_HeaderDigest,
&iscsi_tpg_param_DataDigest.attr, &iscsi_tpg_param_attr_DataDigest,
&iscsi_tpg_param_MaxConnections.attr, &iscsi_tpg_param_attr_MaxConnections,
&iscsi_tpg_param_TargetAlias.attr, &iscsi_tpg_param_attr_TargetAlias,
&iscsi_tpg_param_InitialR2T.attr, &iscsi_tpg_param_attr_InitialR2T,
&iscsi_tpg_param_ImmediateData.attr, &iscsi_tpg_param_attr_ImmediateData,
&iscsi_tpg_param_MaxRecvDataSegmentLength.attr, &iscsi_tpg_param_attr_MaxRecvDataSegmentLength,
&iscsi_tpg_param_MaxXmitDataSegmentLength.attr, &iscsi_tpg_param_attr_MaxXmitDataSegmentLength,
&iscsi_tpg_param_MaxBurstLength.attr, &iscsi_tpg_param_attr_MaxBurstLength,
&iscsi_tpg_param_FirstBurstLength.attr, &iscsi_tpg_param_attr_FirstBurstLength,
&iscsi_tpg_param_DefaultTime2Wait.attr, &iscsi_tpg_param_attr_DefaultTime2Wait,
&iscsi_tpg_param_DefaultTime2Retain.attr, &iscsi_tpg_param_attr_DefaultTime2Retain,
&iscsi_tpg_param_MaxOutstandingR2T.attr, &iscsi_tpg_param_attr_MaxOutstandingR2T,
&iscsi_tpg_param_DataPDUInOrder.attr, &iscsi_tpg_param_attr_DataPDUInOrder,
&iscsi_tpg_param_DataSequenceInOrder.attr, &iscsi_tpg_param_attr_DataSequenceInOrder,
&iscsi_tpg_param_ErrorRecoveryLevel.attr, &iscsi_tpg_param_attr_ErrorRecoveryLevel,
&iscsi_tpg_param_IFMarker.attr, &iscsi_tpg_param_attr_IFMarker,
&iscsi_tpg_param_OFMarker.attr, &iscsi_tpg_param_attr_OFMarker,
&iscsi_tpg_param_IFMarkInt.attr, &iscsi_tpg_param_attr_IFMarkInt,
&iscsi_tpg_param_OFMarkInt.attr, &iscsi_tpg_param_attr_OFMarkInt,
NULL, NULL,
}; };
...@@ -1317,10 +1102,9 @@ static struct configfs_attribute *lio_target_tpg_param_attrs[] = { ...@@ -1317,10 +1102,9 @@ static struct configfs_attribute *lio_target_tpg_param_attrs[] = {
/* Start items for lio_target_tpg_cit */ /* Start items for lio_target_tpg_cit */
static ssize_t lio_target_tpg_show_enable( static ssize_t lio_target_tpg_enable_show(struct config_item *item, char *page)
struct se_portal_group *se_tpg,
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct iscsi_portal_group *tpg = container_of(se_tpg, struct iscsi_portal_group *tpg = container_of(se_tpg,
struct iscsi_portal_group, tpg_se_tpg); struct iscsi_portal_group, tpg_se_tpg);
ssize_t len; ssize_t len;
...@@ -1333,11 +1117,10 @@ static ssize_t lio_target_tpg_show_enable( ...@@ -1333,11 +1117,10 @@ static ssize_t lio_target_tpg_show_enable(
return len; return len;
} }
static ssize_t lio_target_tpg_store_enable( static ssize_t lio_target_tpg_enable_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct iscsi_portal_group *tpg = container_of(se_tpg, struct iscsi_portal_group *tpg = container_of(se_tpg,
struct iscsi_portal_group, tpg_se_tpg); struct iscsi_portal_group, tpg_se_tpg);
u32 op; u32 op;
...@@ -1375,20 +1158,19 @@ static ssize_t lio_target_tpg_store_enable( ...@@ -1375,20 +1158,19 @@ static ssize_t lio_target_tpg_store_enable(
return -EINVAL; return -EINVAL;
} }
TF_TPG_BASE_ATTR(lio_target, enable, S_IRUGO | S_IWUSR);
static ssize_t lio_target_tpg_show_dynamic_sessions( static ssize_t lio_target_tpg_dynamic_sessions_show(struct config_item *item,
struct se_portal_group *se_tpg, char *page)
char *page)
{ {
return target_show_dynamic_sessions(se_tpg, page); return target_show_dynamic_sessions(to_tpg(item), page);
} }
TF_TPG_BASE_ATTR_RO(lio_target, dynamic_sessions); CONFIGFS_ATTR(lio_target_tpg_, enable);
CONFIGFS_ATTR_RO(lio_target_tpg_, dynamic_sessions);
static struct configfs_attribute *lio_target_tpg_attrs[] = { static struct configfs_attribute *lio_target_tpg_attrs[] = {
&lio_target_tpg_enable.attr, &lio_target_tpg_attr_enable,
&lio_target_tpg_dynamic_sessions.attr, &lio_target_tpg_attr_dynamic_sessions,
NULL, NULL,
}; };
...@@ -1463,17 +1245,16 @@ static void lio_target_tiqn_deltpg(struct se_portal_group *se_tpg) ...@@ -1463,17 +1245,16 @@ static void lio_target_tiqn_deltpg(struct se_portal_group *se_tpg)
/* Start LIO-Target TIQN struct contig_item lio_target_cit */ /* Start LIO-Target TIQN struct contig_item lio_target_cit */
static ssize_t lio_target_wwn_show_attr_lio_version( static ssize_t lio_target_wwn_lio_version_show(struct config_item *item,
struct target_fabric_configfs *tf, char *page)
char *page)
{ {
return sprintf(page, "Datera Inc. iSCSI Target "ISCSIT_VERSION"\n"); return sprintf(page, "Datera Inc. iSCSI Target "ISCSIT_VERSION"\n");
} }
TF_WWN_ATTR_RO(lio_target, lio_version); CONFIGFS_ATTR_RO(lio_target_wwn_, lio_version);
static struct configfs_attribute *lio_target_wwn_attrs[] = { static struct configfs_attribute *lio_target_wwn_attrs[] = {
&lio_target_wwn_lio_version.attr, &lio_target_wwn_attr_lio_version,
NULL, NULL,
}; };
...@@ -1552,77 +1333,47 @@ static void lio_target_call_coredeltiqn( ...@@ -1552,77 +1333,47 @@ static void lio_target_call_coredeltiqn(
#define DEF_DISC_AUTH_STR(name, flags) \ #define DEF_DISC_AUTH_STR(name, flags) \
__DEF_NACL_AUTH_STR(disc, name, flags) \ __DEF_NACL_AUTH_STR(disc, name, flags) \
static ssize_t iscsi_disc_show_##name( \ static ssize_t iscsi_disc_##name##_show(struct config_item *item, char *page) \
struct target_fabric_configfs *tf, \
char *page) \
{ \ { \
return __iscsi_disc_show_##name(&iscsit_global->discovery_acl, \ return __iscsi_disc_##name##_show(&iscsit_global->discovery_acl,\
page); \ page); \
} \ } \
static ssize_t iscsi_disc_store_##name( \ static ssize_t iscsi_disc_##name##_store(struct config_item *item, \
struct target_fabric_configfs *tf, \ const char *page, size_t count) \
const char *page, \
size_t count) \
{ \ { \
return __iscsi_disc_store_##name(&iscsit_global->discovery_acl, \ return __iscsi_disc_##name##_store(&iscsit_global->discovery_acl, \
page, count); \ page, count); \
} \
} \
CONFIGFS_ATTR(iscsi_disc_, name)
DEF_DISC_AUTH_STR(userid, NAF_USERID_SET);
DEF_DISC_AUTH_STR(password, NAF_PASSWORD_SET);
DEF_DISC_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
DEF_DISC_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
#define DEF_DISC_AUTH_INT(name) \ #define DEF_DISC_AUTH_INT(name) \
__DEF_NACL_AUTH_INT(disc, name) \ __DEF_NACL_AUTH_INT(disc, name) \
static ssize_t iscsi_disc_show_##name( \ static ssize_t iscsi_disc_##name##_show(struct config_item *item, char *page) \
struct target_fabric_configfs *tf, \
char *page) \
{ \ { \
return __iscsi_disc_show_##name(&iscsit_global->discovery_acl, \ return __iscsi_disc_##name##_show(&iscsit_global->discovery_acl, \
page); \ page); \
} } \
CONFIGFS_ATTR_RO(iscsi_disc_, name)
#define DISC_AUTH_ATTR(_name, _mode) TF_DISC_ATTR(iscsi, _name, _mode)
#define DISC_AUTH_ATTR_RO(_name) TF_DISC_ATTR_RO(iscsi, _name)
/*
* One-way authentication userid
*/
DEF_DISC_AUTH_STR(userid, NAF_USERID_SET);
DISC_AUTH_ATTR(userid, S_IRUGO | S_IWUSR);
/*
* One-way authentication password
*/
DEF_DISC_AUTH_STR(password, NAF_PASSWORD_SET);
DISC_AUTH_ATTR(password, S_IRUGO | S_IWUSR);
/*
* Enforce mutual authentication
*/
DEF_DISC_AUTH_INT(authenticate_target); DEF_DISC_AUTH_INT(authenticate_target);
DISC_AUTH_ATTR_RO(authenticate_target);
/*
* Mutual authentication userid
*/
DEF_DISC_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
DISC_AUTH_ATTR(userid_mutual, S_IRUGO | S_IWUSR);
/*
* Mutual authentication password
*/
DEF_DISC_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
DISC_AUTH_ATTR(password_mutual, S_IRUGO | S_IWUSR);
/*
* enforce_discovery_auth static ssize_t iscsi_disc_enforce_discovery_auth_show(struct config_item *item,
*/ char *page)
static ssize_t iscsi_disc_show_enforce_discovery_auth(
struct target_fabric_configfs *tf,
char *page)
{ {
struct iscsi_node_auth *discovery_auth = &iscsit_global->discovery_acl.node_auth; struct iscsi_node_auth *discovery_auth = &iscsit_global->discovery_acl.node_auth;
return sprintf(page, "%d\n", discovery_auth->enforce_discovery_auth); return sprintf(page, "%d\n", discovery_auth->enforce_discovery_auth);
} }
static ssize_t iscsi_disc_store_enforce_discovery_auth( static ssize_t iscsi_disc_enforce_discovery_auth_store(struct config_item *item,
struct target_fabric_configfs *tf, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct iscsi_param *param; struct iscsi_param *param;
struct iscsi_portal_group *discovery_tpg = iscsit_global->discovery_tpg; struct iscsi_portal_group *discovery_tpg = iscsit_global->discovery_tpg;
...@@ -1677,15 +1428,15 @@ static ssize_t iscsi_disc_store_enforce_discovery_auth( ...@@ -1677,15 +1428,15 @@ static ssize_t iscsi_disc_store_enforce_discovery_auth(
return count; return count;
} }
DISC_AUTH_ATTR(enforce_discovery_auth, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(iscsi_disc_, enforce_discovery_auth);
static struct configfs_attribute *lio_target_discovery_auth_attrs[] = { static struct configfs_attribute *lio_target_discovery_auth_attrs[] = {
&iscsi_disc_userid.attr, &iscsi_disc_attr_userid,
&iscsi_disc_password.attr, &iscsi_disc_attr_password,
&iscsi_disc_authenticate_target.attr, &iscsi_disc_attr_authenticate_target,
&iscsi_disc_userid_mutual.attr, &iscsi_disc_attr_userid_mutual,
&iscsi_disc_password_mutual.attr, &iscsi_disc_attr_password_mutual,
&iscsi_disc_enforce_discovery_auth.attr, &iscsi_disc_attr_enforce_discovery_auth,
NULL, NULL,
}; };
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <linux/export.h> #include <linux/export.h>
#include <scsi/iscsi_proto.h> #include <scsi/iscsi_proto.h>
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/configfs_macros.h>
#include <target/iscsi/iscsi_target_core.h> #include <target/iscsi/iscsi_target_core.h>
#include "iscsi_target_parameters.h" #include "iscsi_target_parameters.h"
...@@ -50,76 +49,56 @@ ...@@ -50,76 +49,56 @@
/* /*
* Instance Attributes Table * Instance Attributes Table
*/ */
CONFIGFS_EATTR_STRUCT(iscsi_stat_instance, iscsi_wwn_stat_grps); static struct iscsi_tiqn *iscsi_instance_tiqn(struct config_item *item)
#define ISCSI_STAT_INSTANCE_ATTR(_name, _mode) \ {
static struct iscsi_stat_instance_attribute \ struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
iscsi_stat_instance_##_name = \ struct iscsi_wwn_stat_grps, iscsi_instance_group);
__CONFIGFS_EATTR(_name, _mode, \ return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
iscsi_stat_instance_show_attr_##_name, \ }
iscsi_stat_instance_store_attr_##_name);
#define ISCSI_STAT_INSTANCE_ATTR_RO(_name) \
static struct iscsi_stat_instance_attribute \
iscsi_stat_instance_##_name = \
__CONFIGFS_EATTR_RO(_name, \
iscsi_stat_instance_show_attr_##_name);
static ssize_t iscsi_stat_instance_show_attr_inst(
struct iscsi_wwn_stat_grps *igrps, char *page)
{
struct iscsi_tiqn *tiqn = container_of(igrps,
struct iscsi_tiqn, tiqn_stat_grps);
return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); static ssize_t iscsi_stat_instance_inst_show(struct config_item *item,
char *page)
{
return snprintf(page, PAGE_SIZE, "%u\n",
iscsi_instance_tiqn(item)->tiqn_index);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(inst);
static ssize_t iscsi_stat_instance_show_attr_min_ver( static ssize_t iscsi_stat_instance_min_ver_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION); return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(min_ver);
static ssize_t iscsi_stat_instance_show_attr_max_ver( static ssize_t iscsi_stat_instance_max_ver_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION); return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(max_ver);
static ssize_t iscsi_stat_instance_show_attr_portals( static ssize_t iscsi_stat_instance_portals_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, return snprintf(page, PAGE_SIZE, "%u\n",
struct iscsi_tiqn, tiqn_stat_grps); iscsi_instance_tiqn(item)->tiqn_num_tpg_nps);
return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_num_tpg_nps);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(portals);
static ssize_t iscsi_stat_instance_show_attr_nodes( static ssize_t iscsi_stat_instance_nodes_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_INST_NUM_NODES); return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_INST_NUM_NODES);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(nodes);
static ssize_t iscsi_stat_instance_show_attr_sessions( static ssize_t iscsi_stat_instance_sessions_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, return snprintf(page, PAGE_SIZE, "%u\n",
struct iscsi_tiqn, tiqn_stat_grps); iscsi_instance_tiqn(item)->tiqn_nsessions);
return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_nsessions);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(sessions);
static ssize_t iscsi_stat_instance_show_attr_fail_sess( static ssize_t iscsi_stat_instance_fail_sess_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_instance_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
u32 sess_err_count; u32 sess_err_count;
...@@ -131,88 +110,84 @@ static ssize_t iscsi_stat_instance_show_attr_fail_sess( ...@@ -131,88 +110,84 @@ static ssize_t iscsi_stat_instance_show_attr_fail_sess(
return snprintf(page, PAGE_SIZE, "%u\n", sess_err_count); return snprintf(page, PAGE_SIZE, "%u\n", sess_err_count);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(fail_sess);
static ssize_t iscsi_stat_instance_show_attr_fail_type( static ssize_t iscsi_stat_instance_fail_type_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_instance_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
return snprintf(page, PAGE_SIZE, "%u\n", return snprintf(page, PAGE_SIZE, "%u\n",
sess_err->last_sess_failure_type); sess_err->last_sess_failure_type);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(fail_type);
static ssize_t iscsi_stat_instance_show_attr_fail_rem_name( static ssize_t iscsi_stat_instance_fail_rem_name_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_instance_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
return snprintf(page, PAGE_SIZE, "%s\n", return snprintf(page, PAGE_SIZE, "%s\n",
sess_err->last_sess_fail_rem_name[0] ? sess_err->last_sess_fail_rem_name[0] ?
sess_err->last_sess_fail_rem_name : NONE); sess_err->last_sess_fail_rem_name : NONE);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(fail_rem_name);
static ssize_t iscsi_stat_instance_show_attr_disc_time( static ssize_t iscsi_stat_instance_disc_time_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DISCONTINUITY_TIME); return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DISCONTINUITY_TIME);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(disc_time);
static ssize_t iscsi_stat_instance_show_attr_description( static ssize_t iscsi_stat_instance_description_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
return snprintf(page, PAGE_SIZE, "%s\n", ISCSI_INST_DESCR); return snprintf(page, PAGE_SIZE, "%s\n", ISCSI_INST_DESCR);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(description);
static ssize_t iscsi_stat_instance_show_attr_vendor( static ssize_t iscsi_stat_instance_vendor_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
return snprintf(page, PAGE_SIZE, "Datera, Inc. iSCSI-Target\n"); return snprintf(page, PAGE_SIZE, "Datera, Inc. iSCSI-Target\n");
} }
ISCSI_STAT_INSTANCE_ATTR_RO(vendor);
static ssize_t iscsi_stat_instance_show_attr_version( static ssize_t iscsi_stat_instance_version_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
return snprintf(page, PAGE_SIZE, "%s\n", ISCSIT_VERSION); return snprintf(page, PAGE_SIZE, "%s\n", ISCSIT_VERSION);
} }
ISCSI_STAT_INSTANCE_ATTR_RO(version);
CONFIGFS_EATTR_OPS(iscsi_stat_instance, iscsi_wwn_stat_grps, CONFIGFS_ATTR_RO(iscsi_stat_instance_, inst);
iscsi_instance_group); CONFIGFS_ATTR_RO(iscsi_stat_instance_, min_ver);
CONFIGFS_ATTR_RO(iscsi_stat_instance_, max_ver);
CONFIGFS_ATTR_RO(iscsi_stat_instance_, portals);
CONFIGFS_ATTR_RO(iscsi_stat_instance_, nodes);
CONFIGFS_ATTR_RO(iscsi_stat_instance_, sessions);
CONFIGFS_ATTR_RO(iscsi_stat_instance_, fail_sess);
CONFIGFS_ATTR_RO(iscsi_stat_instance_, fail_type);
CONFIGFS_ATTR_RO(iscsi_stat_instance_, fail_rem_name);
CONFIGFS_ATTR_RO(iscsi_stat_instance_, disc_time);
CONFIGFS_ATTR_RO(iscsi_stat_instance_, description);
CONFIGFS_ATTR_RO(iscsi_stat_instance_, vendor);
CONFIGFS_ATTR_RO(iscsi_stat_instance_, version);
static struct configfs_attribute *iscsi_stat_instance_attrs[] = { static struct configfs_attribute *iscsi_stat_instance_attrs[] = {
&iscsi_stat_instance_inst.attr, &iscsi_stat_instance_attr_inst,
&iscsi_stat_instance_min_ver.attr, &iscsi_stat_instance_attr_min_ver,
&iscsi_stat_instance_max_ver.attr, &iscsi_stat_instance_attr_max_ver,
&iscsi_stat_instance_portals.attr, &iscsi_stat_instance_attr_portals,
&iscsi_stat_instance_nodes.attr, &iscsi_stat_instance_attr_nodes,
&iscsi_stat_instance_sessions.attr, &iscsi_stat_instance_attr_sessions,
&iscsi_stat_instance_fail_sess.attr, &iscsi_stat_instance_attr_fail_sess,
&iscsi_stat_instance_fail_type.attr, &iscsi_stat_instance_attr_fail_type,
&iscsi_stat_instance_fail_rem_name.attr, &iscsi_stat_instance_attr_fail_rem_name,
&iscsi_stat_instance_disc_time.attr, &iscsi_stat_instance_attr_disc_time,
&iscsi_stat_instance_description.attr, &iscsi_stat_instance_attr_description,
&iscsi_stat_instance_vendor.attr, &iscsi_stat_instance_attr_vendor,
&iscsi_stat_instance_version.attr, &iscsi_stat_instance_attr_version,
NULL, NULL,
}; };
static struct configfs_item_operations iscsi_stat_instance_item_ops = {
.show_attribute = iscsi_stat_instance_attr_show,
.store_attribute = iscsi_stat_instance_attr_store,
};
struct config_item_type iscsi_stat_instance_cit = { struct config_item_type iscsi_stat_instance_cit = {
.ct_item_ops = &iscsi_stat_instance_item_ops,
.ct_attrs = iscsi_stat_instance_attrs, .ct_attrs = iscsi_stat_instance_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -220,81 +195,61 @@ struct config_item_type iscsi_stat_instance_cit = { ...@@ -220,81 +195,61 @@ struct config_item_type iscsi_stat_instance_cit = {
/* /*
* Instance Session Failure Stats Table * Instance Session Failure Stats Table
*/ */
CONFIGFS_EATTR_STRUCT(iscsi_stat_sess_err, iscsi_wwn_stat_grps); static struct iscsi_tiqn *iscsi_sess_err_tiqn(struct config_item *item)
#define ISCSI_STAT_SESS_ERR_ATTR(_name, _mode) \ {
static struct iscsi_stat_sess_err_attribute \ struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
iscsi_stat_sess_err_##_name = \ struct iscsi_wwn_stat_grps, iscsi_sess_err_group);
__CONFIGFS_EATTR(_name, _mode, \ return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
iscsi_stat_sess_err_show_attr_##_name, \ }
iscsi_stat_sess_err_store_attr_##_name);
#define ISCSI_STAT_SESS_ERR_ATTR_RO(_name) \
static struct iscsi_stat_sess_err_attribute \
iscsi_stat_sess_err_##_name = \
__CONFIGFS_EATTR_RO(_name, \
iscsi_stat_sess_err_show_attr_##_name);
static ssize_t iscsi_stat_sess_err_show_attr_inst(
struct iscsi_wwn_stat_grps *igrps, char *page)
{
struct iscsi_tiqn *tiqn = container_of(igrps,
struct iscsi_tiqn, tiqn_stat_grps);
return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); static ssize_t iscsi_stat_sess_err_inst_show(struct config_item *item,
char *page)
{
return snprintf(page, PAGE_SIZE, "%u\n",
iscsi_sess_err_tiqn(item)->tiqn_index);
} }
ISCSI_STAT_SESS_ERR_ATTR_RO(inst);
static ssize_t iscsi_stat_sess_err_show_attr_digest_errors( static ssize_t iscsi_stat_sess_err_digest_errors_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_sess_err_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
return snprintf(page, PAGE_SIZE, "%u\n", sess_err->digest_errors); return snprintf(page, PAGE_SIZE, "%u\n", sess_err->digest_errors);
} }
ISCSI_STAT_SESS_ERR_ATTR_RO(digest_errors);
static ssize_t iscsi_stat_sess_err_show_attr_cxn_errors( static ssize_t iscsi_stat_sess_err_cxn_errors_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_sess_err_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
return snprintf(page, PAGE_SIZE, "%u\n", sess_err->cxn_timeout_errors); return snprintf(page, PAGE_SIZE, "%u\n", sess_err->cxn_timeout_errors);
} }
ISCSI_STAT_SESS_ERR_ATTR_RO(cxn_errors);
static ssize_t iscsi_stat_sess_err_show_attr_format_errors( static ssize_t iscsi_stat_sess_err_format_errors_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_sess_err_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
return snprintf(page, PAGE_SIZE, "%u\n", sess_err->pdu_format_errors); return snprintf(page, PAGE_SIZE, "%u\n", sess_err->pdu_format_errors);
} }
ISCSI_STAT_SESS_ERR_ATTR_RO(format_errors);
CONFIGFS_EATTR_OPS(iscsi_stat_sess_err, iscsi_wwn_stat_grps, CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, inst);
iscsi_sess_err_group); CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, digest_errors);
CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, cxn_errors);
CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, format_errors);
static struct configfs_attribute *iscsi_stat_sess_err_attrs[] = { static struct configfs_attribute *iscsi_stat_sess_err_attrs[] = {
&iscsi_stat_sess_err_inst.attr, &iscsi_stat_sess_err_attr_inst,
&iscsi_stat_sess_err_digest_errors.attr, &iscsi_stat_sess_err_attr_digest_errors,
&iscsi_stat_sess_err_cxn_errors.attr, &iscsi_stat_sess_err_attr_cxn_errors,
&iscsi_stat_sess_err_format_errors.attr, &iscsi_stat_sess_err_attr_format_errors,
NULL, NULL,
}; };
static struct configfs_item_operations iscsi_stat_sess_err_item_ops = {
.show_attribute = iscsi_stat_sess_err_attr_show,
.store_attribute = iscsi_stat_sess_err_attr_store,
};
struct config_item_type iscsi_stat_sess_err_cit = { struct config_item_type iscsi_stat_sess_err_cit = {
.ct_item_ops = &iscsi_stat_sess_err_item_ops,
.ct_attrs = iscsi_stat_sess_err_attrs, .ct_attrs = iscsi_stat_sess_err_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -302,42 +257,30 @@ struct config_item_type iscsi_stat_sess_err_cit = { ...@@ -302,42 +257,30 @@ struct config_item_type iscsi_stat_sess_err_cit = {
/* /*
* Target Attributes Table * Target Attributes Table
*/ */
CONFIGFS_EATTR_STRUCT(iscsi_stat_tgt_attr, iscsi_wwn_stat_grps); static struct iscsi_tiqn *iscsi_tgt_attr_tiqn(struct config_item *item)
#define ISCSI_STAT_TGT_ATTR(_name, _mode) \ {
static struct iscsi_stat_tgt_attr_attribute \ struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
iscsi_stat_tgt_attr_##_name = \ struct iscsi_wwn_stat_grps, iscsi_tgt_attr_group);
__CONFIGFS_EATTR(_name, _mode, \ return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
iscsi_stat_tgt-attr_show_attr_##_name, \ }
iscsi_stat_tgt_attr_store_attr_##_name);
#define ISCSI_STAT_TGT_ATTR_RO(_name) \
static struct iscsi_stat_tgt_attr_attribute \
iscsi_stat_tgt_attr_##_name = \
__CONFIGFS_EATTR_RO(_name, \
iscsi_stat_tgt_attr_show_attr_##_name);
static ssize_t iscsi_stat_tgt_attr_show_attr_inst(
struct iscsi_wwn_stat_grps *igrps, char *page)
{
struct iscsi_tiqn *tiqn = container_of(igrps,
struct iscsi_tiqn, tiqn_stat_grps);
return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); static ssize_t iscsi_stat_tgt_attr_inst_show(struct config_item *item,
char *page)
{
return snprintf(page, PAGE_SIZE, "%u\n",
iscsi_tgt_attr_tiqn(item)->tiqn_index);
} }
ISCSI_STAT_TGT_ATTR_RO(inst);
static ssize_t iscsi_stat_tgt_attr_show_attr_indx( static ssize_t iscsi_stat_tgt_attr_indx_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX); return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX);
} }
ISCSI_STAT_TGT_ATTR_RO(indx);
static ssize_t iscsi_stat_tgt_attr_show_attr_login_fails( static ssize_t iscsi_stat_tgt_attr_login_fails_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
u32 fail_count; u32 fail_count;
...@@ -349,13 +292,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_login_fails( ...@@ -349,13 +292,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_login_fails(
return snprintf(page, PAGE_SIZE, "%u\n", fail_count); return snprintf(page, PAGE_SIZE, "%u\n", fail_count);
} }
ISCSI_STAT_TGT_ATTR_RO(login_fails);
static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_time( static ssize_t iscsi_stat_tgt_attr_last_fail_time_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
u32 last_fail_time; u32 last_fail_time;
...@@ -367,13 +308,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_time( ...@@ -367,13 +308,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_time(
return snprintf(page, PAGE_SIZE, "%u\n", last_fail_time); return snprintf(page, PAGE_SIZE, "%u\n", last_fail_time);
} }
ISCSI_STAT_TGT_ATTR_RO(last_fail_time);
static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_type( static ssize_t iscsi_stat_tgt_attr_last_fail_type_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
u32 last_fail_type; u32 last_fail_type;
...@@ -383,13 +322,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_type( ...@@ -383,13 +322,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_type(
return snprintf(page, PAGE_SIZE, "%u\n", last_fail_type); return snprintf(page, PAGE_SIZE, "%u\n", last_fail_type);
} }
ISCSI_STAT_TGT_ATTR_RO(last_fail_type);
static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_name( static ssize_t iscsi_stat_tgt_attr_fail_intr_name_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
unsigned char buf[224]; unsigned char buf[224];
...@@ -400,13 +337,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_name( ...@@ -400,13 +337,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_name(
return snprintf(page, PAGE_SIZE, "%s\n", buf); return snprintf(page, PAGE_SIZE, "%s\n", buf);
} }
ISCSI_STAT_TGT_ATTR_RO(fail_intr_name);
static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr_type( static ssize_t iscsi_stat_tgt_attr_fail_intr_addr_type_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
int ret; int ret;
...@@ -419,13 +354,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr_type( ...@@ -419,13 +354,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr_type(
return ret; return ret;
} }
ISCSI_STAT_TGT_ATTR_RO(fail_intr_addr_type);
static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr( static ssize_t iscsi_stat_tgt_attr_fail_intr_addr_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
int ret; int ret;
...@@ -435,30 +368,29 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr( ...@@ -435,30 +368,29 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr(
return ret; return ret;
} }
ISCSI_STAT_TGT_ATTR_RO(fail_intr_addr);
CONFIGFS_EATTR_OPS(iscsi_stat_tgt_attr, iscsi_wwn_stat_grps, CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, inst);
iscsi_tgt_attr_group); CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, indx);
CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, login_fails);
CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, last_fail_time);
CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, last_fail_type);
CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, fail_intr_name);
CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, fail_intr_addr_type);
CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, fail_intr_addr);
static struct configfs_attribute *iscsi_stat_tgt_attr_attrs[] = { static struct configfs_attribute *iscsi_stat_tgt_attr_attrs[] = {
&iscsi_stat_tgt_attr_inst.attr, &iscsi_stat_tgt_attr_attr_inst,
&iscsi_stat_tgt_attr_indx.attr, &iscsi_stat_tgt_attr_attr_indx,
&iscsi_stat_tgt_attr_login_fails.attr, &iscsi_stat_tgt_attr_attr_login_fails,
&iscsi_stat_tgt_attr_last_fail_time.attr, &iscsi_stat_tgt_attr_attr_last_fail_time,
&iscsi_stat_tgt_attr_last_fail_type.attr, &iscsi_stat_tgt_attr_attr_last_fail_type,
&iscsi_stat_tgt_attr_fail_intr_name.attr, &iscsi_stat_tgt_attr_attr_fail_intr_name,
&iscsi_stat_tgt_attr_fail_intr_addr_type.attr, &iscsi_stat_tgt_attr_attr_fail_intr_addr_type,
&iscsi_stat_tgt_attr_fail_intr_addr.attr, &iscsi_stat_tgt_attr_attr_fail_intr_addr,
NULL, NULL,
}; };
static struct configfs_item_operations iscsi_stat_tgt_attr_item_ops = {
.show_attribute = iscsi_stat_tgt_attr_attr_show,
.store_attribute = iscsi_stat_tgt_attr_attr_store,
};
struct config_item_type iscsi_stat_tgt_attr_cit = { struct config_item_type iscsi_stat_tgt_attr_cit = {
.ct_item_ops = &iscsi_stat_tgt_attr_item_ops,
.ct_attrs = iscsi_stat_tgt_attr_attrs, .ct_attrs = iscsi_stat_tgt_attr_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -466,42 +398,29 @@ struct config_item_type iscsi_stat_tgt_attr_cit = { ...@@ -466,42 +398,29 @@ struct config_item_type iscsi_stat_tgt_attr_cit = {
/* /*
* Target Login Stats Table * Target Login Stats Table
*/ */
CONFIGFS_EATTR_STRUCT(iscsi_stat_login, iscsi_wwn_stat_grps); static struct iscsi_tiqn *iscsi_login_stat_tiqn(struct config_item *item)
#define ISCSI_STAT_LOGIN(_name, _mode) \ {
static struct iscsi_stat_login_attribute \ struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
iscsi_stat_login_##_name = \ struct iscsi_wwn_stat_grps, iscsi_login_stats_group);
__CONFIGFS_EATTR(_name, _mode, \ return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
iscsi_stat_login_show_attr_##_name, \ }
iscsi_stat_login_store_attr_##_name);
#define ISCSI_STAT_LOGIN_RO(_name) \
static struct iscsi_stat_login_attribute \
iscsi_stat_login_##_name = \
__CONFIGFS_EATTR_RO(_name, \
iscsi_stat_login_show_attr_##_name);
static ssize_t iscsi_stat_login_show_attr_inst(
struct iscsi_wwn_stat_grps *igrps, char *page)
{
struct iscsi_tiqn *tiqn = container_of(igrps,
struct iscsi_tiqn, tiqn_stat_grps);
return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); static ssize_t iscsi_stat_login_inst_show(struct config_item *item, char *page)
{
return snprintf(page, PAGE_SIZE, "%u\n",
iscsi_login_stat_tiqn(item)->tiqn_index);
} }
ISCSI_STAT_LOGIN_RO(inst);
static ssize_t iscsi_stat_login_show_attr_indx( static ssize_t iscsi_stat_login_indx_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX); return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX);
} }
ISCSI_STAT_LOGIN_RO(indx);
static ssize_t iscsi_stat_login_show_attr_accepts( static ssize_t iscsi_stat_login_accepts_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
ssize_t ret; ssize_t ret;
...@@ -511,13 +430,11 @@ static ssize_t iscsi_stat_login_show_attr_accepts( ...@@ -511,13 +430,11 @@ static ssize_t iscsi_stat_login_show_attr_accepts(
return ret; return ret;
} }
ISCSI_STAT_LOGIN_RO(accepts);
static ssize_t iscsi_stat_login_show_attr_other_fails( static ssize_t iscsi_stat_login_other_fails_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
ssize_t ret; ssize_t ret;
...@@ -527,13 +444,11 @@ static ssize_t iscsi_stat_login_show_attr_other_fails( ...@@ -527,13 +444,11 @@ static ssize_t iscsi_stat_login_show_attr_other_fails(
return ret; return ret;
} }
ISCSI_STAT_LOGIN_RO(other_fails);
static ssize_t iscsi_stat_login_show_attr_redirects( static ssize_t iscsi_stat_login_redirects_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
ssize_t ret; ssize_t ret;
...@@ -543,13 +458,11 @@ static ssize_t iscsi_stat_login_show_attr_redirects( ...@@ -543,13 +458,11 @@ static ssize_t iscsi_stat_login_show_attr_redirects(
return ret; return ret;
} }
ISCSI_STAT_LOGIN_RO(redirects);
static ssize_t iscsi_stat_login_show_attr_authorize_fails( static ssize_t iscsi_stat_login_authorize_fails_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
ssize_t ret; ssize_t ret;
...@@ -559,13 +472,11 @@ static ssize_t iscsi_stat_login_show_attr_authorize_fails( ...@@ -559,13 +472,11 @@ static ssize_t iscsi_stat_login_show_attr_authorize_fails(
return ret; return ret;
} }
ISCSI_STAT_LOGIN_RO(authorize_fails);
static ssize_t iscsi_stat_login_show_attr_authenticate_fails( static ssize_t iscsi_stat_login_authenticate_fails_show(
struct iscsi_wwn_stat_grps *igrps, char *page) struct config_item *item, char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
ssize_t ret; ssize_t ret;
...@@ -575,13 +486,11 @@ static ssize_t iscsi_stat_login_show_attr_authenticate_fails( ...@@ -575,13 +486,11 @@ static ssize_t iscsi_stat_login_show_attr_authenticate_fails(
return ret; return ret;
} }
ISCSI_STAT_LOGIN_RO(authenticate_fails);
static ssize_t iscsi_stat_login_show_attr_negotiate_fails( static ssize_t iscsi_stat_login_negotiate_fails_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_login_stats *lstat = &tiqn->login_stats; struct iscsi_login_stats *lstat = &tiqn->login_stats;
ssize_t ret; ssize_t ret;
...@@ -591,30 +500,29 @@ static ssize_t iscsi_stat_login_show_attr_negotiate_fails( ...@@ -591,30 +500,29 @@ static ssize_t iscsi_stat_login_show_attr_negotiate_fails(
return ret; return ret;
} }
ISCSI_STAT_LOGIN_RO(negotiate_fails);
CONFIGFS_EATTR_OPS(iscsi_stat_login, iscsi_wwn_stat_grps, CONFIGFS_ATTR_RO(iscsi_stat_login_, inst);
iscsi_login_stats_group); CONFIGFS_ATTR_RO(iscsi_stat_login_, indx);
CONFIGFS_ATTR_RO(iscsi_stat_login_, accepts);
CONFIGFS_ATTR_RO(iscsi_stat_login_, other_fails);
CONFIGFS_ATTR_RO(iscsi_stat_login_, redirects);
CONFIGFS_ATTR_RO(iscsi_stat_login_, authorize_fails);
CONFIGFS_ATTR_RO(iscsi_stat_login_, authenticate_fails);
CONFIGFS_ATTR_RO(iscsi_stat_login_, negotiate_fails);
static struct configfs_attribute *iscsi_stat_login_stats_attrs[] = { static struct configfs_attribute *iscsi_stat_login_stats_attrs[] = {
&iscsi_stat_login_inst.attr, &iscsi_stat_login_attr_inst,
&iscsi_stat_login_indx.attr, &iscsi_stat_login_attr_indx,
&iscsi_stat_login_accepts.attr, &iscsi_stat_login_attr_accepts,
&iscsi_stat_login_other_fails.attr, &iscsi_stat_login_attr_other_fails,
&iscsi_stat_login_redirects.attr, &iscsi_stat_login_attr_redirects,
&iscsi_stat_login_authorize_fails.attr, &iscsi_stat_login_attr_authorize_fails,
&iscsi_stat_login_authenticate_fails.attr, &iscsi_stat_login_attr_authenticate_fails,
&iscsi_stat_login_negotiate_fails.attr, &iscsi_stat_login_attr_negotiate_fails,
NULL, NULL,
}; };
static struct configfs_item_operations iscsi_stat_login_stats_item_ops = {
.show_attribute = iscsi_stat_login_attr_show,
.store_attribute = iscsi_stat_login_attr_store,
};
struct config_item_type iscsi_stat_login_cit = { struct config_item_type iscsi_stat_login_cit = {
.ct_item_ops = &iscsi_stat_login_stats_item_ops,
.ct_attrs = iscsi_stat_login_stats_attrs, .ct_attrs = iscsi_stat_login_stats_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -622,78 +530,56 @@ struct config_item_type iscsi_stat_login_cit = { ...@@ -622,78 +530,56 @@ struct config_item_type iscsi_stat_login_cit = {
/* /*
* Target Logout Stats Table * Target Logout Stats Table
*/ */
static struct iscsi_tiqn *iscsi_logout_stat_tiqn(struct config_item *item)
CONFIGFS_EATTR_STRUCT(iscsi_stat_logout, iscsi_wwn_stat_grps);
#define ISCSI_STAT_LOGOUT(_name, _mode) \
static struct iscsi_stat_logout_attribute \
iscsi_stat_logout_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
iscsi_stat_logout_show_attr_##_name, \
iscsi_stat_logout_store_attr_##_name);
#define ISCSI_STAT_LOGOUT_RO(_name) \
static struct iscsi_stat_logout_attribute \
iscsi_stat_logout_##_name = \
__CONFIGFS_EATTR_RO(_name, \
iscsi_stat_logout_show_attr_##_name);
static ssize_t iscsi_stat_logout_show_attr_inst(
struct iscsi_wwn_stat_grps *igrps, char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
struct iscsi_tiqn, tiqn_stat_grps); struct iscsi_wwn_stat_grps, iscsi_logout_stats_group);
return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
}
return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); static ssize_t iscsi_stat_logout_inst_show(struct config_item *item, char *page)
{
return snprintf(page, PAGE_SIZE, "%u\n",
iscsi_logout_stat_tiqn(item)->tiqn_index);
} }
ISCSI_STAT_LOGOUT_RO(inst);
static ssize_t iscsi_stat_logout_show_attr_indx( static ssize_t iscsi_stat_logout_indx_show(struct config_item *item, char *page)
struct iscsi_wwn_stat_grps *igrps, char *page)
{ {
return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX); return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX);
} }
ISCSI_STAT_LOGOUT_RO(indx);
static ssize_t iscsi_stat_logout_show_attr_normal_logouts( static ssize_t iscsi_stat_logout_normal_logouts_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_logout_stat_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_logout_stats *lstats = &tiqn->logout_stats; struct iscsi_logout_stats *lstats = &tiqn->logout_stats;
return snprintf(page, PAGE_SIZE, "%u\n", lstats->normal_logouts); return snprintf(page, PAGE_SIZE, "%u\n", lstats->normal_logouts);
} }
ISCSI_STAT_LOGOUT_RO(normal_logouts);
static ssize_t iscsi_stat_logout_show_attr_abnormal_logouts( static ssize_t iscsi_stat_logout_abnormal_logouts_show(struct config_item *item,
struct iscsi_wwn_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_tiqn *tiqn = container_of(igrps, struct iscsi_tiqn *tiqn = iscsi_logout_stat_tiqn(item);
struct iscsi_tiqn, tiqn_stat_grps);
struct iscsi_logout_stats *lstats = &tiqn->logout_stats; struct iscsi_logout_stats *lstats = &tiqn->logout_stats;
return snprintf(page, PAGE_SIZE, "%u\n", lstats->abnormal_logouts); return snprintf(page, PAGE_SIZE, "%u\n", lstats->abnormal_logouts);
} }
ISCSI_STAT_LOGOUT_RO(abnormal_logouts);
CONFIGFS_EATTR_OPS(iscsi_stat_logout, iscsi_wwn_stat_grps, CONFIGFS_ATTR_RO(iscsi_stat_logout_, inst);
iscsi_logout_stats_group); CONFIGFS_ATTR_RO(iscsi_stat_logout_, indx);
CONFIGFS_ATTR_RO(iscsi_stat_logout_, normal_logouts);
CONFIGFS_ATTR_RO(iscsi_stat_logout_, abnormal_logouts);
static struct configfs_attribute *iscsi_stat_logout_stats_attrs[] = { static struct configfs_attribute *iscsi_stat_logout_stats_attrs[] = {
&iscsi_stat_logout_inst.attr, &iscsi_stat_logout_attr_inst,
&iscsi_stat_logout_indx.attr, &iscsi_stat_logout_attr_indx,
&iscsi_stat_logout_normal_logouts.attr, &iscsi_stat_logout_attr_normal_logouts,
&iscsi_stat_logout_abnormal_logouts.attr, &iscsi_stat_logout_attr_abnormal_logouts,
NULL, NULL,
}; };
static struct configfs_item_operations iscsi_stat_logout_stats_item_ops = {
.show_attribute = iscsi_stat_logout_attr_show,
.store_attribute = iscsi_stat_logout_attr_store,
};
struct config_item_type iscsi_stat_logout_cit = { struct config_item_type iscsi_stat_logout_cit = {
.ct_item_ops = &iscsi_stat_logout_stats_item_ops,
.ct_attrs = iscsi_stat_logout_stats_attrs, .ct_attrs = iscsi_stat_logout_stats_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -701,39 +587,26 @@ struct config_item_type iscsi_stat_logout_cit = { ...@@ -701,39 +587,26 @@ struct config_item_type iscsi_stat_logout_cit = {
/* /*
* Session Stats Table * Session Stats Table
*/ */
static struct iscsi_node_acl *iscsi_stat_nacl(struct config_item *item)
{
struct iscsi_node_stat_grps *igrps = container_of(to_config_group(item),
struct iscsi_node_stat_grps, iscsi_sess_stats_group);
return container_of(igrps, struct iscsi_node_acl, node_stat_grps);
}
CONFIGFS_EATTR_STRUCT(iscsi_stat_sess, iscsi_node_stat_grps); static ssize_t iscsi_stat_sess_inst_show(struct config_item *item, char *page)
#define ISCSI_STAT_SESS(_name, _mode) \ {
static struct iscsi_stat_sess_attribute \ struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
iscsi_stat_sess_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
iscsi_stat_sess_show_attr_##_name, \
iscsi_stat_sess_store_attr_##_name);
#define ISCSI_STAT_SESS_RO(_name) \
static struct iscsi_stat_sess_attribute \
iscsi_stat_sess_##_name = \
__CONFIGFS_EATTR_RO(_name, \
iscsi_stat_sess_show_attr_##_name);
static ssize_t iscsi_stat_sess_show_attr_inst(
struct iscsi_node_stat_grps *igrps, char *page)
{
struct iscsi_node_acl *acl = container_of(igrps,
struct iscsi_node_acl, node_stat_grps);
struct se_wwn *wwn = acl->se_node_acl.se_tpg->se_tpg_wwn; struct se_wwn *wwn = acl->se_node_acl.se_tpg->se_tpg_wwn;
struct iscsi_tiqn *tiqn = container_of(wwn, struct iscsi_tiqn *tiqn = container_of(wwn,
struct iscsi_tiqn, tiqn_wwn); struct iscsi_tiqn, tiqn_wwn);
return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index);
} }
ISCSI_STAT_SESS_RO(inst);
static ssize_t iscsi_stat_sess_show_attr_node( static ssize_t iscsi_stat_sess_node_show(struct config_item *item, char *page)
struct iscsi_node_stat_grps *igrps, char *page)
{ {
struct iscsi_node_acl *acl = container_of(igrps, struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
struct iscsi_node_acl, node_stat_grps);
struct se_node_acl *se_nacl = &acl->se_node_acl; struct se_node_acl *se_nacl = &acl->se_node_acl;
struct iscsi_session *sess; struct iscsi_session *sess;
struct se_session *se_sess; struct se_session *se_sess;
...@@ -751,13 +624,10 @@ static ssize_t iscsi_stat_sess_show_attr_node( ...@@ -751,13 +624,10 @@ static ssize_t iscsi_stat_sess_show_attr_node(
return ret; return ret;
} }
ISCSI_STAT_SESS_RO(node);
static ssize_t iscsi_stat_sess_show_attr_indx( static ssize_t iscsi_stat_sess_indx_show(struct config_item *item, char *page)
struct iscsi_node_stat_grps *igrps, char *page)
{ {
struct iscsi_node_acl *acl = container_of(igrps, struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
struct iscsi_node_acl, node_stat_grps);
struct se_node_acl *se_nacl = &acl->se_node_acl; struct se_node_acl *se_nacl = &acl->se_node_acl;
struct iscsi_session *sess; struct iscsi_session *sess;
struct se_session *se_sess; struct se_session *se_sess;
...@@ -775,13 +645,11 @@ static ssize_t iscsi_stat_sess_show_attr_indx( ...@@ -775,13 +645,11 @@ static ssize_t iscsi_stat_sess_show_attr_indx(
return ret; return ret;
} }
ISCSI_STAT_SESS_RO(indx);
static ssize_t iscsi_stat_sess_show_attr_cmd_pdus( static ssize_t iscsi_stat_sess_cmd_pdus_show(struct config_item *item,
struct iscsi_node_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_node_acl *acl = container_of(igrps, struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
struct iscsi_node_acl, node_stat_grps);
struct se_node_acl *se_nacl = &acl->se_node_acl; struct se_node_acl *se_nacl = &acl->se_node_acl;
struct iscsi_session *sess; struct iscsi_session *sess;
struct se_session *se_sess; struct se_session *se_sess;
...@@ -799,13 +667,11 @@ static ssize_t iscsi_stat_sess_show_attr_cmd_pdus( ...@@ -799,13 +667,11 @@ static ssize_t iscsi_stat_sess_show_attr_cmd_pdus(
return ret; return ret;
} }
ISCSI_STAT_SESS_RO(cmd_pdus);
static ssize_t iscsi_stat_sess_show_attr_rsp_pdus( static ssize_t iscsi_stat_sess_rsp_pdus_show(struct config_item *item,
struct iscsi_node_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_node_acl *acl = container_of(igrps, struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
struct iscsi_node_acl, node_stat_grps);
struct se_node_acl *se_nacl = &acl->se_node_acl; struct se_node_acl *se_nacl = &acl->se_node_acl;
struct iscsi_session *sess; struct iscsi_session *sess;
struct se_session *se_sess; struct se_session *se_sess;
...@@ -823,13 +689,11 @@ static ssize_t iscsi_stat_sess_show_attr_rsp_pdus( ...@@ -823,13 +689,11 @@ static ssize_t iscsi_stat_sess_show_attr_rsp_pdus(
return ret; return ret;
} }
ISCSI_STAT_SESS_RO(rsp_pdus);
static ssize_t iscsi_stat_sess_show_attr_txdata_octs( static ssize_t iscsi_stat_sess_txdata_octs_show(struct config_item *item,
struct iscsi_node_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_node_acl *acl = container_of(igrps, struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
struct iscsi_node_acl, node_stat_grps);
struct se_node_acl *se_nacl = &acl->se_node_acl; struct se_node_acl *se_nacl = &acl->se_node_acl;
struct iscsi_session *sess; struct iscsi_session *sess;
struct se_session *se_sess; struct se_session *se_sess;
...@@ -847,13 +711,11 @@ static ssize_t iscsi_stat_sess_show_attr_txdata_octs( ...@@ -847,13 +711,11 @@ static ssize_t iscsi_stat_sess_show_attr_txdata_octs(
return ret; return ret;
} }
ISCSI_STAT_SESS_RO(txdata_octs);
static ssize_t iscsi_stat_sess_show_attr_rxdata_octs( static ssize_t iscsi_stat_sess_rxdata_octs_show(struct config_item *item,
struct iscsi_node_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_node_acl *acl = container_of(igrps, struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
struct iscsi_node_acl, node_stat_grps);
struct se_node_acl *se_nacl = &acl->se_node_acl; struct se_node_acl *se_nacl = &acl->se_node_acl;
struct iscsi_session *sess; struct iscsi_session *sess;
struct se_session *se_sess; struct se_session *se_sess;
...@@ -871,13 +733,11 @@ static ssize_t iscsi_stat_sess_show_attr_rxdata_octs( ...@@ -871,13 +733,11 @@ static ssize_t iscsi_stat_sess_show_attr_rxdata_octs(
return ret; return ret;
} }
ISCSI_STAT_SESS_RO(rxdata_octs);
static ssize_t iscsi_stat_sess_show_attr_conn_digest_errors( static ssize_t iscsi_stat_sess_conn_digest_errors_show(struct config_item *item,
struct iscsi_node_stat_grps *igrps, char *page) char *page)
{ {
struct iscsi_node_acl *acl = container_of(igrps, struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
struct iscsi_node_acl, node_stat_grps);
struct se_node_acl *se_nacl = &acl->se_node_acl; struct se_node_acl *se_nacl = &acl->se_node_acl;
struct iscsi_session *sess; struct iscsi_session *sess;
struct se_session *se_sess; struct se_session *se_sess;
...@@ -895,13 +755,11 @@ static ssize_t iscsi_stat_sess_show_attr_conn_digest_errors( ...@@ -895,13 +755,11 @@ static ssize_t iscsi_stat_sess_show_attr_conn_digest_errors(
return ret; return ret;
} }
ISCSI_STAT_SESS_RO(conn_digest_errors);
static ssize_t iscsi_stat_sess_show_attr_conn_timeout_errors( static ssize_t iscsi_stat_sess_conn_timeout_errors_show(
struct iscsi_node_stat_grps *igrps, char *page) struct config_item *item, char *page)
{ {
struct iscsi_node_acl *acl = container_of(igrps, struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
struct iscsi_node_acl, node_stat_grps);
struct se_node_acl *se_nacl = &acl->se_node_acl; struct se_node_acl *se_nacl = &acl->se_node_acl;
struct iscsi_session *sess; struct iscsi_session *sess;
struct se_session *se_sess; struct se_session *se_sess;
...@@ -919,31 +777,31 @@ static ssize_t iscsi_stat_sess_show_attr_conn_timeout_errors( ...@@ -919,31 +777,31 @@ static ssize_t iscsi_stat_sess_show_attr_conn_timeout_errors(
return ret; return ret;
} }
ISCSI_STAT_SESS_RO(conn_timeout_errors);
CONFIGFS_EATTR_OPS(iscsi_stat_sess, iscsi_node_stat_grps, CONFIGFS_ATTR_RO(iscsi_stat_sess_, inst);
iscsi_sess_stats_group); CONFIGFS_ATTR_RO(iscsi_stat_sess_, node);
CONFIGFS_ATTR_RO(iscsi_stat_sess_, indx);
CONFIGFS_ATTR_RO(iscsi_stat_sess_, cmd_pdus);
CONFIGFS_ATTR_RO(iscsi_stat_sess_, rsp_pdus);
CONFIGFS_ATTR_RO(iscsi_stat_sess_, txdata_octs);
CONFIGFS_ATTR_RO(iscsi_stat_sess_, rxdata_octs);
CONFIGFS_ATTR_RO(iscsi_stat_sess_, conn_digest_errors);
CONFIGFS_ATTR_RO(iscsi_stat_sess_, conn_timeout_errors);
static struct configfs_attribute *iscsi_stat_sess_stats_attrs[] = { static struct configfs_attribute *iscsi_stat_sess_stats_attrs[] = {
&iscsi_stat_sess_inst.attr, &iscsi_stat_sess_attr_inst,
&iscsi_stat_sess_node.attr, &iscsi_stat_sess_attr_node,
&iscsi_stat_sess_indx.attr, &iscsi_stat_sess_attr_indx,
&iscsi_stat_sess_cmd_pdus.attr, &iscsi_stat_sess_attr_cmd_pdus,
&iscsi_stat_sess_rsp_pdus.attr, &iscsi_stat_sess_attr_rsp_pdus,
&iscsi_stat_sess_txdata_octs.attr, &iscsi_stat_sess_attr_txdata_octs,
&iscsi_stat_sess_rxdata_octs.attr, &iscsi_stat_sess_attr_rxdata_octs,
&iscsi_stat_sess_conn_digest_errors.attr, &iscsi_stat_sess_attr_conn_digest_errors,
&iscsi_stat_sess_conn_timeout_errors.attr, &iscsi_stat_sess_attr_conn_timeout_errors,
NULL, NULL,
}; };
static struct configfs_item_operations iscsi_stat_sess_stats_item_ops = {
.show_attribute = iscsi_stat_sess_attr_show,
.store_attribute = iscsi_stat_sess_attr_store,
};
struct config_item_type iscsi_stat_sess_cit = { struct config_item_type iscsi_stat_sess_cit = {
.ct_item_ops = &iscsi_stat_sess_stats_item_ops,
.ct_attrs = iscsi_stat_sess_stats_attrs, .ct_attrs = iscsi_stat_sess_stats_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/target_core_fabric_configfs.h>
#include "tcm_loop.h" #include "tcm_loop.h"
...@@ -763,21 +762,20 @@ static void tcm_loop_port_unlink( ...@@ -763,21 +762,20 @@ static void tcm_loop_port_unlink(
/* End items for tcm_loop_port_cit */ /* End items for tcm_loop_port_cit */
static ssize_t tcm_loop_tpg_attrib_show_fabric_prot_type( static ssize_t tcm_loop_tpg_attrib_fabric_prot_type_show(
struct se_portal_group *se_tpg, struct config_item *item, char *page)
char *page)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg, struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg,
tl_se_tpg); tl_se_tpg);
return sprintf(page, "%d\n", tl_tpg->tl_fabric_prot_type); return sprintf(page, "%d\n", tl_tpg->tl_fabric_prot_type);
} }
static ssize_t tcm_loop_tpg_attrib_store_fabric_prot_type( static ssize_t tcm_loop_tpg_attrib_fabric_prot_type_store(
struct se_portal_group *se_tpg, 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 tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg, struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg,
tl_se_tpg); tl_se_tpg);
unsigned long val; unsigned long val;
...@@ -796,10 +794,10 @@ static ssize_t tcm_loop_tpg_attrib_store_fabric_prot_type( ...@@ -796,10 +794,10 @@ static ssize_t tcm_loop_tpg_attrib_store_fabric_prot_type(
return count; return count;
} }
TF_TPG_ATTRIB_ATTR(tcm_loop, fabric_prot_type, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(tcm_loop_tpg_attrib_, fabric_prot_type);
static struct configfs_attribute *tcm_loop_tpg_attrib_attrs[] = { static struct configfs_attribute *tcm_loop_tpg_attrib_attrs[] = {
&tcm_loop_tpg_attrib_fabric_prot_type.attr, &tcm_loop_tpg_attrib_attr_fabric_prot_type,
NULL, NULL,
}; };
...@@ -894,10 +892,9 @@ static int tcm_loop_drop_nexus( ...@@ -894,10 +892,9 @@ static int tcm_loop_drop_nexus(
/* End items for tcm_loop_nexus_cit */ /* End items for tcm_loop_nexus_cit */
static ssize_t tcm_loop_tpg_show_nexus( static ssize_t tcm_loop_tpg_nexus_show(struct config_item *item, char *page)
struct se_portal_group *se_tpg,
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
struct tcm_loop_tpg, tl_se_tpg); struct tcm_loop_tpg, tl_se_tpg);
struct tcm_loop_nexus *tl_nexus; struct tcm_loop_nexus *tl_nexus;
...@@ -913,11 +910,10 @@ static ssize_t tcm_loop_tpg_show_nexus( ...@@ -913,11 +910,10 @@ static ssize_t tcm_loop_tpg_show_nexus(
return ret; return ret;
} }
static ssize_t tcm_loop_tpg_store_nexus( static ssize_t tcm_loop_tpg_nexus_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
struct tcm_loop_tpg, tl_se_tpg); struct tcm_loop_tpg, tl_se_tpg);
struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba; struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba;
...@@ -992,12 +988,10 @@ static ssize_t tcm_loop_tpg_store_nexus( ...@@ -992,12 +988,10 @@ static ssize_t tcm_loop_tpg_store_nexus(
return count; return count;
} }
TF_TPG_BASE_ATTR(tcm_loop, nexus, S_IRUGO | S_IWUSR); static ssize_t tcm_loop_tpg_transport_status_show(struct config_item *item,
char *page)
static ssize_t tcm_loop_tpg_show_transport_status(
struct se_portal_group *se_tpg,
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
struct tcm_loop_tpg, tl_se_tpg); struct tcm_loop_tpg, tl_se_tpg);
const char *status = NULL; const char *status = NULL;
...@@ -1020,11 +1014,10 @@ static ssize_t tcm_loop_tpg_show_transport_status( ...@@ -1020,11 +1014,10 @@ static ssize_t tcm_loop_tpg_show_transport_status(
return ret; return ret;
} }
static ssize_t tcm_loop_tpg_store_transport_status( static ssize_t tcm_loop_tpg_transport_status_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
struct tcm_loop_tpg, tl_se_tpg); struct tcm_loop_tpg, tl_se_tpg);
...@@ -1044,11 +1037,12 @@ static ssize_t tcm_loop_tpg_store_transport_status( ...@@ -1044,11 +1037,12 @@ static ssize_t tcm_loop_tpg_store_transport_status(
return -EINVAL; return -EINVAL;
} }
TF_TPG_BASE_ATTR(tcm_loop, transport_status, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(tcm_loop_tpg_, nexus);
CONFIGFS_ATTR(tcm_loop_tpg_, transport_status);
static struct configfs_attribute *tcm_loop_tpg_attrs[] = { static struct configfs_attribute *tcm_loop_tpg_attrs[] = {
&tcm_loop_tpg_nexus.attr, &tcm_loop_tpg_attr_nexus,
&tcm_loop_tpg_transport_status.attr, &tcm_loop_tpg_attr_transport_status,
NULL, NULL,
}; };
...@@ -1216,17 +1210,15 @@ static void tcm_loop_drop_scsi_hba( ...@@ -1216,17 +1210,15 @@ static void tcm_loop_drop_scsi_hba(
} }
/* Start items for tcm_loop_cit */ /* Start items for tcm_loop_cit */
static ssize_t tcm_loop_wwn_show_attr_version( static ssize_t tcm_loop_wwn_version_show(struct config_item *item, char *page)
struct target_fabric_configfs *tf,
char *page)
{ {
return sprintf(page, "TCM Loopback Fabric module %s\n", TCM_LOOP_VERSION); return sprintf(page, "TCM Loopback Fabric module %s\n", TCM_LOOP_VERSION);
} }
TF_WWN_ATTR_RO(tcm_loop, version); CONFIGFS_ATTR_RO(tcm_loop_wwn_, version);
static struct configfs_attribute *tcm_loop_wwn_attrs[] = { static struct configfs_attribute *tcm_loop_wwn_attrs[] = {
&tcm_loop_wwn_version.attr, &tcm_loop_wwn_attr_version,
NULL, NULL,
}; };
......
...@@ -35,8 +35,6 @@ ...@@ -35,8 +35,6 @@
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_backend.h> #include <target/target_core_backend.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/target_core_fabric_configfs.h>
#include <target/configfs_macros.h>
#include <asm/unaligned.h> #include <asm/unaligned.h>
#include "sbp_target.h" #include "sbp_target.h"
...@@ -2111,24 +2109,21 @@ static void sbp_drop_tport(struct se_wwn *wwn) ...@@ -2111,24 +2109,21 @@ static void sbp_drop_tport(struct se_wwn *wwn)
kfree(tport); kfree(tport);
} }
static ssize_t sbp_wwn_show_attr_version( static ssize_t sbp_wwn_version_show(struct config_item *item, char *page)
struct target_fabric_configfs *tf,
char *page)
{ {
return sprintf(page, "FireWire SBP fabric module %s\n", SBP_VERSION); return sprintf(page, "FireWire SBP fabric module %s\n", SBP_VERSION);
} }
TF_WWN_ATTR_RO(sbp, version); CONFIGFS_ATTR_RO(sbp_wwn_, version);
static struct configfs_attribute *sbp_wwn_attrs[] = { static struct configfs_attribute *sbp_wwn_attrs[] = {
&sbp_wwn_version.attr, &sbp_wwn_attr_version,
NULL, NULL,
}; };
static ssize_t sbp_tpg_show_directory_id( static ssize_t sbp_tpg_directory_id_show(struct config_item *item, char *page)
struct se_portal_group *se_tpg,
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
struct sbp_tport *tport = tpg->tport; struct sbp_tport *tport = tpg->tport;
...@@ -2138,11 +2133,10 @@ static ssize_t sbp_tpg_show_directory_id( ...@@ -2138,11 +2133,10 @@ static ssize_t sbp_tpg_show_directory_id(
return sprintf(page, "%06x\n", tport->directory_id); return sprintf(page, "%06x\n", tport->directory_id);
} }
static ssize_t sbp_tpg_store_directory_id( static ssize_t sbp_tpg_directory_id_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
struct sbp_tport *tport = tpg->tport; struct sbp_tport *tport = tpg->tport;
unsigned long val; unsigned long val;
...@@ -2166,20 +2160,18 @@ static ssize_t sbp_tpg_store_directory_id( ...@@ -2166,20 +2160,18 @@ static ssize_t sbp_tpg_store_directory_id(
return count; return count;
} }
static ssize_t sbp_tpg_show_enable( static ssize_t sbp_tpg_enable_show(struct config_item *item, char *page)
struct se_portal_group *se_tpg,
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
struct sbp_tport *tport = tpg->tport; struct sbp_tport *tport = tpg->tport;
return sprintf(page, "%d\n", tport->enable); return sprintf(page, "%d\n", tport->enable);
} }
static ssize_t sbp_tpg_store_enable( static ssize_t sbp_tpg_enable_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
struct sbp_tport *tport = tpg->tport; struct sbp_tport *tport = tpg->tport;
unsigned long val; unsigned long val;
...@@ -2219,29 +2211,28 @@ static ssize_t sbp_tpg_store_enable( ...@@ -2219,29 +2211,28 @@ static ssize_t sbp_tpg_store_enable(
return count; return count;
} }
TF_TPG_BASE_ATTR(sbp, directory_id, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(sbp_tpg_, directory_id);
TF_TPG_BASE_ATTR(sbp, enable, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(sbp_tpg_, enable);
static struct configfs_attribute *sbp_tpg_base_attrs[] = { static struct configfs_attribute *sbp_tpg_base_attrs[] = {
&sbp_tpg_directory_id.attr, &sbp_tpg_attr_directory_id,
&sbp_tpg_enable.attr, &sbp_tpg_attr_enable,
NULL, NULL,
}; };
static ssize_t sbp_tpg_attrib_show_mgt_orb_timeout( static ssize_t sbp_tpg_attrib_mgt_orb_timeout_show(struct config_item *item,
struct se_portal_group *se_tpg,
char *page) char *page)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
struct sbp_tport *tport = tpg->tport; struct sbp_tport *tport = tpg->tport;
return sprintf(page, "%d\n", tport->mgt_orb_timeout); return sprintf(page, "%d\n", tport->mgt_orb_timeout);
} }
static ssize_t sbp_tpg_attrib_store_mgt_orb_timeout( static ssize_t sbp_tpg_attrib_mgt_orb_timeout_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
struct sbp_tport *tport = tpg->tport; struct sbp_tport *tport = tpg->tport;
unsigned long val; unsigned long val;
...@@ -2264,20 +2255,19 @@ static ssize_t sbp_tpg_attrib_store_mgt_orb_timeout( ...@@ -2264,20 +2255,19 @@ static ssize_t sbp_tpg_attrib_store_mgt_orb_timeout(
return count; return count;
} }
static ssize_t sbp_tpg_attrib_show_max_reconnect_timeout( static ssize_t sbp_tpg_attrib_max_reconnect_timeout_show(struct config_item *item,
struct se_portal_group *se_tpg,
char *page) char *page)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
struct sbp_tport *tport = tpg->tport; struct sbp_tport *tport = tpg->tport;
return sprintf(page, "%d\n", tport->max_reconnect_timeout); return sprintf(page, "%d\n", tport->max_reconnect_timeout);
} }
static ssize_t sbp_tpg_attrib_store_max_reconnect_timeout( static ssize_t sbp_tpg_attrib_max_reconnect_timeout_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
struct sbp_tport *tport = tpg->tport; struct sbp_tport *tport = tpg->tport;
unsigned long val; unsigned long val;
...@@ -2300,20 +2290,19 @@ static ssize_t sbp_tpg_attrib_store_max_reconnect_timeout( ...@@ -2300,20 +2290,19 @@ static ssize_t sbp_tpg_attrib_store_max_reconnect_timeout(
return count; return count;
} }
static ssize_t sbp_tpg_attrib_show_max_logins_per_lun( static ssize_t sbp_tpg_attrib_max_logins_per_lun_show(struct config_item *item,
struct se_portal_group *se_tpg,
char *page) char *page)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
struct sbp_tport *tport = tpg->tport; struct sbp_tport *tport = tpg->tport;
return sprintf(page, "%d\n", tport->max_logins_per_lun); return sprintf(page, "%d\n", tport->max_logins_per_lun);
} }
static ssize_t sbp_tpg_attrib_store_max_logins_per_lun( static ssize_t sbp_tpg_attrib_max_logins_per_lun_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
struct sbp_tport *tport = tpg->tport; struct sbp_tport *tport = tpg->tport;
unsigned long val; unsigned long val;
...@@ -2330,14 +2319,14 @@ static ssize_t sbp_tpg_attrib_store_max_logins_per_lun( ...@@ -2330,14 +2319,14 @@ static ssize_t sbp_tpg_attrib_store_max_logins_per_lun(
return count; return count;
} }
TF_TPG_ATTRIB_ATTR(sbp, mgt_orb_timeout, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(sbp_tpg_attrib_, mgt_orb_timeout);
TF_TPG_ATTRIB_ATTR(sbp, max_reconnect_timeout, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(sbp_tpg_attrib_, max_reconnect_timeout);
TF_TPG_ATTRIB_ATTR(sbp, max_logins_per_lun, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(sbp_tpg_attrib_, max_logins_per_lun);
static struct configfs_attribute *sbp_tpg_attrib_attrs[] = { static struct configfs_attribute *sbp_tpg_attrib_attrs[] = {
&sbp_tpg_attrib_mgt_orb_timeout.attr, &sbp_tpg_attrib_attr_mgt_orb_timeout,
&sbp_tpg_attrib_max_reconnect_timeout.attr, &sbp_tpg_attrib_attr_max_reconnect_timeout,
&sbp_tpg_attrib_max_logins_per_lun.attr, &sbp_tpg_attrib_attr_max_logins_per_lun,
NULL, NULL,
}; };
......
...@@ -40,8 +40,6 @@ ...@@ -40,8 +40,6 @@
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_backend.h> #include <target/target_core_backend.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/target_core_fabric_configfs.h>
#include <target/configfs_macros.h>
#include "target_core_internal.h" #include "target_core_internal.h"
#include "target_core_alua.h" #include "target_core_alua.h"
...@@ -78,12 +76,6 @@ extern struct t10_alua_lu_gp *default_lu_gp; ...@@ -78,12 +76,6 @@ extern struct t10_alua_lu_gp *default_lu_gp;
static LIST_HEAD(g_tf_list); static LIST_HEAD(g_tf_list);
static DEFINE_MUTEX(g_tf_lock); static DEFINE_MUTEX(g_tf_lock);
struct target_core_configfs_attribute {
struct configfs_attribute attr;
ssize_t (*show)(void *, char *);
ssize_t (*store)(void *, const char *, size_t);
};
static struct config_group target_core_hbagroup; static struct config_group target_core_hbagroup;
static struct config_group alua_group; static struct config_group alua_group;
static struct config_group alua_lu_gps_group; static struct config_group alua_lu_gps_group;
...@@ -97,24 +89,15 @@ item_to_hba(struct config_item *item) ...@@ -97,24 +89,15 @@ item_to_hba(struct config_item *item)
/* /*
* Attributes for /sys/kernel/config/target/ * Attributes for /sys/kernel/config/target/
*/ */
static ssize_t target_core_attr_show(struct config_item *item, static ssize_t target_core_item_version_show(struct config_item *item,
struct configfs_attribute *attr, char *page)
char *page)
{ {
return sprintf(page, "Target Engine Core ConfigFS Infrastructure %s" return sprintf(page, "Target Engine Core ConfigFS Infrastructure %s"
" on %s/%s on "UTS_RELEASE"\n", TARGET_CORE_VERSION, " on %s/%s on "UTS_RELEASE"\n", TARGET_CORE_VERSION,
utsname()->sysname, utsname()->machine); utsname()->sysname, utsname()->machine);
} }
static struct configfs_item_operations target_core_fabric_item_ops = { CONFIGFS_ATTR_RO(target_core_item_, version);
.show_attribute = target_core_attr_show,
};
static struct configfs_attribute target_core_item_attr_version = {
.ca_owner = THIS_MODULE,
.ca_name = "version",
.ca_mode = S_IRUGO,
};
static struct target_fabric_configfs *target_core_get_fabric( static struct target_fabric_configfs *target_core_get_fabric(
const char *name) const char *name)
...@@ -273,7 +256,6 @@ static struct configfs_attribute *target_core_fabric_item_attrs[] = { ...@@ -273,7 +256,6 @@ static struct configfs_attribute *target_core_fabric_item_attrs[] = {
* Provides Fabrics Groups and Item Attributes for /sys/kernel/config/target/ * Provides Fabrics Groups and Item Attributes for /sys/kernel/config/target/
*/ */
static struct config_item_type target_core_fabrics_item = { static struct config_item_type target_core_fabrics_item = {
.ct_item_ops = &target_core_fabric_item_ops,
.ct_group_ops = &target_core_fabric_group_ops, .ct_group_ops = &target_core_fabric_group_ops,
.ct_attrs = target_core_fabric_item_attrs, .ct_attrs = target_core_fabric_item_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
...@@ -476,47 +458,54 @@ EXPORT_SYMBOL(target_unregister_template); ...@@ -476,47 +458,54 @@ EXPORT_SYMBOL(target_unregister_template);
// Stop functions called by external Target Fabrics Modules // Stop functions called by external Target Fabrics Modules
//############################################################################*/ //############################################################################*/
static inline struct se_dev_attrib *to_attrib(struct config_item *item)
{
return container_of(to_config_group(item), struct se_dev_attrib,
da_group);
}
/* Start functions for struct config_item_type tb_dev_attrib_cit */ /* Start functions for struct config_item_type tb_dev_attrib_cit */
#define DEF_TB_DEV_ATTRIB_SHOW(_name) \ #define DEF_CONFIGFS_ATTRIB_SHOW(_name) \
static ssize_t show_##_name(struct se_dev_attrib *da, char *page) \ static ssize_t _name##_show(struct config_item *item, char *page) \
{ \ { \
return snprintf(page, PAGE_SIZE, "%u\n", da->_name); \ return snprintf(page, PAGE_SIZE, "%u\n", to_attrib(item)->_name); \
} }
DEF_TB_DEV_ATTRIB_SHOW(emulate_model_alias); DEF_CONFIGFS_ATTRIB_SHOW(emulate_model_alias);
DEF_TB_DEV_ATTRIB_SHOW(emulate_dpo); DEF_CONFIGFS_ATTRIB_SHOW(emulate_dpo);
DEF_TB_DEV_ATTRIB_SHOW(emulate_fua_write); DEF_CONFIGFS_ATTRIB_SHOW(emulate_fua_write);
DEF_TB_DEV_ATTRIB_SHOW(emulate_fua_read); DEF_CONFIGFS_ATTRIB_SHOW(emulate_fua_read);
DEF_TB_DEV_ATTRIB_SHOW(emulate_write_cache); DEF_CONFIGFS_ATTRIB_SHOW(emulate_write_cache);
DEF_TB_DEV_ATTRIB_SHOW(emulate_ua_intlck_ctrl); DEF_CONFIGFS_ATTRIB_SHOW(emulate_ua_intlck_ctrl);
DEF_TB_DEV_ATTRIB_SHOW(emulate_tas); DEF_CONFIGFS_ATTRIB_SHOW(emulate_tas);
DEF_TB_DEV_ATTRIB_SHOW(emulate_tpu); DEF_CONFIGFS_ATTRIB_SHOW(emulate_tpu);
DEF_TB_DEV_ATTRIB_SHOW(emulate_tpws); DEF_CONFIGFS_ATTRIB_SHOW(emulate_tpws);
DEF_TB_DEV_ATTRIB_SHOW(emulate_caw); DEF_CONFIGFS_ATTRIB_SHOW(emulate_caw);
DEF_TB_DEV_ATTRIB_SHOW(emulate_3pc); DEF_CONFIGFS_ATTRIB_SHOW(emulate_3pc);
DEF_TB_DEV_ATTRIB_SHOW(pi_prot_type); DEF_CONFIGFS_ATTRIB_SHOW(pi_prot_type);
DEF_TB_DEV_ATTRIB_SHOW(hw_pi_prot_type); DEF_CONFIGFS_ATTRIB_SHOW(hw_pi_prot_type);
DEF_TB_DEV_ATTRIB_SHOW(pi_prot_format); DEF_CONFIGFS_ATTRIB_SHOW(pi_prot_format);
DEF_TB_DEV_ATTRIB_SHOW(enforce_pr_isids); DEF_CONFIGFS_ATTRIB_SHOW(enforce_pr_isids);
DEF_TB_DEV_ATTRIB_SHOW(is_nonrot); DEF_CONFIGFS_ATTRIB_SHOW(is_nonrot);
DEF_TB_DEV_ATTRIB_SHOW(emulate_rest_reord); DEF_CONFIGFS_ATTRIB_SHOW(emulate_rest_reord);
DEF_TB_DEV_ATTRIB_SHOW(force_pr_aptpl); DEF_CONFIGFS_ATTRIB_SHOW(force_pr_aptpl);
DEF_TB_DEV_ATTRIB_SHOW(hw_block_size); DEF_CONFIGFS_ATTRIB_SHOW(hw_block_size);
DEF_TB_DEV_ATTRIB_SHOW(block_size); DEF_CONFIGFS_ATTRIB_SHOW(block_size);
DEF_TB_DEV_ATTRIB_SHOW(hw_max_sectors); DEF_CONFIGFS_ATTRIB_SHOW(hw_max_sectors);
DEF_TB_DEV_ATTRIB_SHOW(optimal_sectors); DEF_CONFIGFS_ATTRIB_SHOW(optimal_sectors);
DEF_TB_DEV_ATTRIB_SHOW(hw_queue_depth); DEF_CONFIGFS_ATTRIB_SHOW(hw_queue_depth);
DEF_TB_DEV_ATTRIB_SHOW(queue_depth); DEF_CONFIGFS_ATTRIB_SHOW(queue_depth);
DEF_TB_DEV_ATTRIB_SHOW(max_unmap_lba_count); DEF_CONFIGFS_ATTRIB_SHOW(max_unmap_lba_count);
DEF_TB_DEV_ATTRIB_SHOW(max_unmap_block_desc_count); DEF_CONFIGFS_ATTRIB_SHOW(max_unmap_block_desc_count);
DEF_TB_DEV_ATTRIB_SHOW(unmap_granularity); DEF_CONFIGFS_ATTRIB_SHOW(unmap_granularity);
DEF_TB_DEV_ATTRIB_SHOW(unmap_granularity_alignment); DEF_CONFIGFS_ATTRIB_SHOW(unmap_granularity_alignment);
DEF_TB_DEV_ATTRIB_SHOW(max_write_same_len); DEF_CONFIGFS_ATTRIB_SHOW(max_write_same_len);
#define DEF_TB_DEV_ATTRIB_STORE_U32(_name) \ #define DEF_CONFIGFS_ATTRIB_STORE_U32(_name) \
static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ static ssize_t _name##_store(struct config_item *item, const char *page,\
size_t count) \ size_t count) \
{ \ { \
struct se_dev_attrib *da = to_attrib(item); \
u32 val; \ u32 val; \
int ret; \ int ret; \
\ \
...@@ -527,16 +516,17 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ ...@@ -527,16 +516,17 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\
return count; \ return count; \
} }
DEF_TB_DEV_ATTRIB_STORE_U32(max_unmap_lba_count); DEF_CONFIGFS_ATTRIB_STORE_U32(max_unmap_lba_count);
DEF_TB_DEV_ATTRIB_STORE_U32(max_unmap_block_desc_count); DEF_CONFIGFS_ATTRIB_STORE_U32(max_unmap_block_desc_count);
DEF_TB_DEV_ATTRIB_STORE_U32(unmap_granularity); DEF_CONFIGFS_ATTRIB_STORE_U32(unmap_granularity);
DEF_TB_DEV_ATTRIB_STORE_U32(unmap_granularity_alignment); DEF_CONFIGFS_ATTRIB_STORE_U32(unmap_granularity_alignment);
DEF_TB_DEV_ATTRIB_STORE_U32(max_write_same_len); DEF_CONFIGFS_ATTRIB_STORE_U32(max_write_same_len);
#define DEF_TB_DEV_ATTRIB_STORE_BOOL(_name) \ #define DEF_CONFIGFS_ATTRIB_STORE_BOOL(_name) \
static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ static ssize_t _name##_store(struct config_item *item, const char *page, \
size_t count) \ size_t count) \
{ \ { \
struct se_dev_attrib *da = to_attrib(item); \
bool flag; \ bool flag; \
int ret; \ int ret; \
\ \
...@@ -547,14 +537,14 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ ...@@ -547,14 +537,14 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\
return count; \ return count; \
} }
DEF_TB_DEV_ATTRIB_STORE_BOOL(emulate_fua_write); DEF_CONFIGFS_ATTRIB_STORE_BOOL(emulate_fua_write);
DEF_TB_DEV_ATTRIB_STORE_BOOL(emulate_caw); DEF_CONFIGFS_ATTRIB_STORE_BOOL(emulate_caw);
DEF_TB_DEV_ATTRIB_STORE_BOOL(emulate_3pc); DEF_CONFIGFS_ATTRIB_STORE_BOOL(emulate_3pc);
DEF_TB_DEV_ATTRIB_STORE_BOOL(enforce_pr_isids); DEF_CONFIGFS_ATTRIB_STORE_BOOL(enforce_pr_isids);
DEF_TB_DEV_ATTRIB_STORE_BOOL(is_nonrot); DEF_CONFIGFS_ATTRIB_STORE_BOOL(is_nonrot);
#define DEF_TB_DEV_ATTRIB_STORE_STUB(_name) \ #define DEF_CONFIGFS_ATTRIB_STORE_STUB(_name) \
static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ static ssize_t _name##_store(struct config_item *item, const char *page,\
size_t count) \ size_t count) \
{ \ { \
printk_once(KERN_WARNING \ printk_once(KERN_WARNING \
...@@ -562,8 +552,8 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ ...@@ -562,8 +552,8 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\
return count; \ return count; \
} }
DEF_TB_DEV_ATTRIB_STORE_STUB(emulate_dpo); DEF_CONFIGFS_ATTRIB_STORE_STUB(emulate_dpo);
DEF_TB_DEV_ATTRIB_STORE_STUB(emulate_fua_read); DEF_CONFIGFS_ATTRIB_STORE_STUB(emulate_fua_read);
static void dev_set_t10_wwn_model_alias(struct se_device *dev) static void dev_set_t10_wwn_model_alias(struct se_device *dev)
{ {
...@@ -578,9 +568,10 @@ static void dev_set_t10_wwn_model_alias(struct se_device *dev) ...@@ -578,9 +568,10 @@ static void dev_set_t10_wwn_model_alias(struct se_device *dev)
snprintf(&dev->t10_wwn.model[0], 16, "%s", configname); snprintf(&dev->t10_wwn.model[0], 16, "%s", configname);
} }
static ssize_t store_emulate_model_alias(struct se_dev_attrib *da, static ssize_t emulate_model_alias_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
struct se_device *dev = da->da_dev; struct se_device *dev = da->da_dev;
bool flag; bool flag;
int ret; int ret;
...@@ -606,9 +597,10 @@ static ssize_t store_emulate_model_alias(struct se_dev_attrib *da, ...@@ -606,9 +597,10 @@ static ssize_t store_emulate_model_alias(struct se_dev_attrib *da,
return count; return count;
} }
static ssize_t store_emulate_write_cache(struct se_dev_attrib *da, static ssize_t emulate_write_cache_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
bool flag; bool flag;
int ret; int ret;
...@@ -627,9 +619,10 @@ static ssize_t store_emulate_write_cache(struct se_dev_attrib *da, ...@@ -627,9 +619,10 @@ static ssize_t store_emulate_write_cache(struct se_dev_attrib *da,
return count; return count;
} }
static ssize_t store_emulate_ua_intlck_ctrl(struct se_dev_attrib *da, static ssize_t emulate_ua_intlck_ctrl_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
u32 val; u32 val;
int ret; int ret;
...@@ -654,9 +647,10 @@ static ssize_t store_emulate_ua_intlck_ctrl(struct se_dev_attrib *da, ...@@ -654,9 +647,10 @@ static ssize_t store_emulate_ua_intlck_ctrl(struct se_dev_attrib *da,
return count; return count;
} }
static ssize_t store_emulate_tas(struct se_dev_attrib *da, static ssize_t emulate_tas_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
bool flag; bool flag;
int ret; int ret;
...@@ -677,9 +671,10 @@ static ssize_t store_emulate_tas(struct se_dev_attrib *da, ...@@ -677,9 +671,10 @@ static ssize_t store_emulate_tas(struct se_dev_attrib *da,
return count; return count;
} }
static ssize_t store_emulate_tpu(struct se_dev_attrib *da, static ssize_t emulate_tpu_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
bool flag; bool flag;
int ret; int ret;
...@@ -702,9 +697,10 @@ static ssize_t store_emulate_tpu(struct se_dev_attrib *da, ...@@ -702,9 +697,10 @@ static ssize_t store_emulate_tpu(struct se_dev_attrib *da,
return count; return count;
} }
static ssize_t store_emulate_tpws(struct se_dev_attrib *da, static ssize_t emulate_tpws_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
bool flag; bool flag;
int ret; int ret;
...@@ -727,9 +723,10 @@ static ssize_t store_emulate_tpws(struct se_dev_attrib *da, ...@@ -727,9 +723,10 @@ static ssize_t store_emulate_tpws(struct se_dev_attrib *da,
return count; return count;
} }
static ssize_t store_pi_prot_type(struct se_dev_attrib *da, static ssize_t pi_prot_type_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
int old_prot = da->pi_prot_type, ret; int old_prot = da->pi_prot_type, ret;
struct se_device *dev = da->da_dev; struct se_device *dev = da->da_dev;
u32 flag; u32 flag;
...@@ -787,9 +784,10 @@ static ssize_t store_pi_prot_type(struct se_dev_attrib *da, ...@@ -787,9 +784,10 @@ static ssize_t store_pi_prot_type(struct se_dev_attrib *da,
return count; return count;
} }
static ssize_t store_pi_prot_format(struct se_dev_attrib *da, static ssize_t pi_prot_format_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
struct se_device *dev = da->da_dev; struct se_device *dev = da->da_dev;
bool flag; bool flag;
int ret; int ret;
...@@ -824,9 +822,10 @@ static ssize_t store_pi_prot_format(struct se_dev_attrib *da, ...@@ -824,9 +822,10 @@ static ssize_t store_pi_prot_format(struct se_dev_attrib *da,
return count; return count;
} }
static ssize_t store_force_pr_aptpl(struct se_dev_attrib *da, static ssize_t force_pr_aptpl_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
bool flag; bool flag;
int ret; int ret;
...@@ -845,9 +844,10 @@ static ssize_t store_force_pr_aptpl(struct se_dev_attrib *da, ...@@ -845,9 +844,10 @@ static ssize_t store_force_pr_aptpl(struct se_dev_attrib *da,
return count; return count;
} }
static ssize_t store_emulate_rest_reord(struct se_dev_attrib *da, static ssize_t emulate_rest_reord_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
bool flag; bool flag;
int ret; int ret;
...@@ -869,9 +869,10 @@ static ssize_t store_emulate_rest_reord(struct se_dev_attrib *da, ...@@ -869,9 +869,10 @@ static ssize_t store_emulate_rest_reord(struct se_dev_attrib *da,
/* /*
* Note, this can only be called on unexported SE Device Object. * Note, this can only be called on unexported SE Device Object.
*/ */
static ssize_t store_queue_depth(struct se_dev_attrib *da, static ssize_t queue_depth_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
struct se_device *dev = da->da_dev; struct se_device *dev = da->da_dev;
u32 val; u32 val;
int ret; int ret;
...@@ -905,9 +906,10 @@ static ssize_t store_queue_depth(struct se_dev_attrib *da, ...@@ -905,9 +906,10 @@ static ssize_t store_queue_depth(struct se_dev_attrib *da,
return count; return count;
} }
static ssize_t store_optimal_sectors(struct se_dev_attrib *da, static ssize_t optimal_sectors_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
u32 val; u32 val;
int ret; int ret;
...@@ -934,9 +936,10 @@ static ssize_t store_optimal_sectors(struct se_dev_attrib *da, ...@@ -934,9 +936,10 @@ static ssize_t store_optimal_sectors(struct se_dev_attrib *da,
return count; return count;
} }
static ssize_t store_block_size(struct se_dev_attrib *da, static ssize_t block_size_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_dev_attrib *da = to_attrib(item);
u32 val; u32 val;
int ret; int ret;
...@@ -967,50 +970,35 @@ static ssize_t store_block_size(struct se_dev_attrib *da, ...@@ -967,50 +970,35 @@ static ssize_t store_block_size(struct se_dev_attrib *da,
return count; return count;
} }
CONFIGFS_EATTR_STRUCT(target_backend_dev_attrib, se_dev_attrib); CONFIGFS_ATTR(, emulate_model_alias);
#define TB_DEV_ATTR(_backend, _name, _mode) \ CONFIGFS_ATTR(, emulate_dpo);
static struct target_backend_dev_attrib_attribute _backend##_dev_attrib_##_name = \ CONFIGFS_ATTR(, emulate_fua_write);
__CONFIGFS_EATTR(_name, _mode, \ CONFIGFS_ATTR(, emulate_fua_read);
show_##_name, \ CONFIGFS_ATTR(, emulate_write_cache);
store_##_name); CONFIGFS_ATTR(, emulate_ua_intlck_ctrl);
CONFIGFS_ATTR(, emulate_tas);
#define TB_DEV_ATTR_RO(_backend, _name) \ CONFIGFS_ATTR(, emulate_tpu);
static struct target_backend_dev_attrib_attribute _backend##_dev_attrib_##_name = \ CONFIGFS_ATTR(, emulate_tpws);
__CONFIGFS_EATTR_RO(_name, \ CONFIGFS_ATTR(, emulate_caw);
show_##_name); CONFIGFS_ATTR(, emulate_3pc);
CONFIGFS_ATTR(, pi_prot_type);
TB_DEV_ATTR(target_core, emulate_model_alias, S_IRUGO | S_IWUSR); CONFIGFS_ATTR_RO(, hw_pi_prot_type);
TB_DEV_ATTR(target_core, emulate_dpo, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, pi_prot_format);
TB_DEV_ATTR(target_core, emulate_fua_write, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, enforce_pr_isids);
TB_DEV_ATTR(target_core, emulate_fua_read, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, is_nonrot);
TB_DEV_ATTR(target_core, emulate_write_cache, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, emulate_rest_reord);
TB_DEV_ATTR(target_core, emulate_ua_intlck_ctrl, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, force_pr_aptpl);
TB_DEV_ATTR(target_core, emulate_tas, S_IRUGO | S_IWUSR); CONFIGFS_ATTR_RO(, hw_block_size);
TB_DEV_ATTR(target_core, emulate_tpu, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, block_size);
TB_DEV_ATTR(target_core, emulate_tpws, S_IRUGO | S_IWUSR); CONFIGFS_ATTR_RO(, hw_max_sectors);
TB_DEV_ATTR(target_core, emulate_caw, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, optimal_sectors);
TB_DEV_ATTR(target_core, emulate_3pc, S_IRUGO | S_IWUSR); CONFIGFS_ATTR_RO(, hw_queue_depth);
TB_DEV_ATTR(target_core, pi_prot_type, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, queue_depth);
TB_DEV_ATTR_RO(target_core, hw_pi_prot_type); CONFIGFS_ATTR(, max_unmap_lba_count);
TB_DEV_ATTR(target_core, pi_prot_format, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, max_unmap_block_desc_count);
TB_DEV_ATTR(target_core, enforce_pr_isids, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, unmap_granularity);
TB_DEV_ATTR(target_core, is_nonrot, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, unmap_granularity_alignment);
TB_DEV_ATTR(target_core, emulate_rest_reord, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(, max_write_same_len);
TB_DEV_ATTR(target_core, force_pr_aptpl, S_IRUGO | S_IWUSR)
TB_DEV_ATTR_RO(target_core, hw_block_size);
TB_DEV_ATTR(target_core, block_size, S_IRUGO | S_IWUSR)
TB_DEV_ATTR_RO(target_core, hw_max_sectors);
TB_DEV_ATTR(target_core, optimal_sectors, S_IRUGO | S_IWUSR);
TB_DEV_ATTR_RO(target_core, hw_queue_depth);
TB_DEV_ATTR(target_core, queue_depth, S_IRUGO | S_IWUSR);
TB_DEV_ATTR(target_core, max_unmap_lba_count, S_IRUGO | S_IWUSR);
TB_DEV_ATTR(target_core, max_unmap_block_desc_count, S_IRUGO | S_IWUSR);
TB_DEV_ATTR(target_core, unmap_granularity, S_IRUGO | S_IWUSR);
TB_DEV_ATTR(target_core, unmap_granularity_alignment, S_IRUGO | S_IWUSR);
TB_DEV_ATTR(target_core, max_write_same_len, S_IRUGO | S_IWUSR);
CONFIGFS_EATTR_STRUCT(target_core_dev_attrib, se_dev_attrib);
CONFIGFS_EATTR_OPS(target_core_dev_attrib, se_dev_attrib, da_group);
/* /*
* dev_attrib attributes for devices using the target core SBC/SPC * dev_attrib attributes for devices using the target core SBC/SPC
...@@ -1018,100 +1006,78 @@ CONFIGFS_EATTR_OPS(target_core_dev_attrib, se_dev_attrib, da_group); ...@@ -1018,100 +1006,78 @@ CONFIGFS_EATTR_OPS(target_core_dev_attrib, se_dev_attrib, da_group);
* these. * these.
*/ */
struct configfs_attribute *sbc_attrib_attrs[] = { struct configfs_attribute *sbc_attrib_attrs[] = {
&target_core_dev_attrib_emulate_model_alias.attr, &attr_emulate_model_alias,
&target_core_dev_attrib_emulate_dpo.attr, &attr_emulate_dpo,
&target_core_dev_attrib_emulate_fua_write.attr, &attr_emulate_fua_write,
&target_core_dev_attrib_emulate_fua_read.attr, &attr_emulate_fua_read,
&target_core_dev_attrib_emulate_write_cache.attr, &attr_emulate_write_cache,
&target_core_dev_attrib_emulate_ua_intlck_ctrl.attr, &attr_emulate_ua_intlck_ctrl,
&target_core_dev_attrib_emulate_tas.attr, &attr_emulate_tas,
&target_core_dev_attrib_emulate_tpu.attr, &attr_emulate_tpu,
&target_core_dev_attrib_emulate_tpws.attr, &attr_emulate_tpws,
&target_core_dev_attrib_emulate_caw.attr, &attr_emulate_caw,
&target_core_dev_attrib_emulate_3pc.attr, &attr_emulate_3pc,
&target_core_dev_attrib_pi_prot_type.attr, &attr_pi_prot_type,
&target_core_dev_attrib_hw_pi_prot_type.attr, &attr_hw_pi_prot_type,
&target_core_dev_attrib_pi_prot_format.attr, &attr_pi_prot_format,
&target_core_dev_attrib_enforce_pr_isids.attr, &attr_enforce_pr_isids,
&target_core_dev_attrib_is_nonrot.attr, &attr_is_nonrot,
&target_core_dev_attrib_emulate_rest_reord.attr, &attr_emulate_rest_reord,
&target_core_dev_attrib_force_pr_aptpl.attr, &attr_force_pr_aptpl,
&target_core_dev_attrib_hw_block_size.attr, &attr_hw_block_size,
&target_core_dev_attrib_block_size.attr, &attr_block_size,
&target_core_dev_attrib_hw_max_sectors.attr, &attr_hw_max_sectors,
&target_core_dev_attrib_optimal_sectors.attr, &attr_optimal_sectors,
&target_core_dev_attrib_hw_queue_depth.attr, &attr_hw_queue_depth,
&target_core_dev_attrib_queue_depth.attr, &attr_queue_depth,
&target_core_dev_attrib_max_unmap_lba_count.attr, &attr_max_unmap_lba_count,
&target_core_dev_attrib_max_unmap_block_desc_count.attr, &attr_max_unmap_block_desc_count,
&target_core_dev_attrib_unmap_granularity.attr, &attr_unmap_granularity,
&target_core_dev_attrib_unmap_granularity_alignment.attr, &attr_unmap_granularity_alignment,
&target_core_dev_attrib_max_write_same_len.attr, &attr_max_write_same_len,
NULL, NULL,
}; };
EXPORT_SYMBOL(sbc_attrib_attrs); EXPORT_SYMBOL(sbc_attrib_attrs);
TB_DEV_ATTR_RO(target_pt, hw_pi_prot_type);
TB_DEV_ATTR_RO(target_pt, hw_block_size);
TB_DEV_ATTR_RO(target_pt, hw_max_sectors);
TB_DEV_ATTR_RO(target_pt, hw_queue_depth);
/* /*
* Minimal dev_attrib attributes for devices passing through CDBs. * Minimal dev_attrib attributes for devices passing through CDBs.
* In this case we only provide a few read-only attributes for * In this case we only provide a few read-only attributes for
* backwards compatibility. * backwards compatibility.
*/ */
struct configfs_attribute *passthrough_attrib_attrs[] = { struct configfs_attribute *passthrough_attrib_attrs[] = {
&target_pt_dev_attrib_hw_pi_prot_type.attr, &attr_hw_pi_prot_type,
&target_pt_dev_attrib_hw_block_size.attr, &attr_hw_block_size,
&target_pt_dev_attrib_hw_max_sectors.attr, &attr_hw_max_sectors,
&target_pt_dev_attrib_hw_queue_depth.attr, &attr_hw_queue_depth,
NULL, NULL,
}; };
EXPORT_SYMBOL(passthrough_attrib_attrs); EXPORT_SYMBOL(passthrough_attrib_attrs);
static struct configfs_item_operations target_core_dev_attrib_ops = { TB_CIT_SETUP_DRV(dev_attrib, NULL, NULL);
.show_attribute = target_core_dev_attrib_attr_show,
.store_attribute = target_core_dev_attrib_attr_store,
};
TB_CIT_SETUP_DRV(dev_attrib, &target_core_dev_attrib_ops, NULL);
/* End functions for struct config_item_type tb_dev_attrib_cit */ /* End functions for struct config_item_type tb_dev_attrib_cit */
/* Start functions for struct config_item_type tb_dev_wwn_cit */ /* Start functions for struct config_item_type tb_dev_wwn_cit */
CONFIGFS_EATTR_STRUCT(target_core_dev_wwn, t10_wwn); static struct t10_wwn *to_t10_wwn(struct config_item *item)
#define SE_DEV_WWN_ATTR(_name, _mode) \ {
static struct target_core_dev_wwn_attribute target_core_dev_wwn_##_name = \ return container_of(to_config_group(item), struct t10_wwn, t10_wwn_group);
__CONFIGFS_EATTR(_name, _mode, \ }
target_core_dev_wwn_show_attr_##_name, \
target_core_dev_wwn_store_attr_##_name);
#define SE_DEV_WWN_ATTR_RO(_name); \
do { \
static struct target_core_dev_wwn_attribute \
target_core_dev_wwn_##_name = \
__CONFIGFS_EATTR_RO(_name, \
target_core_dev_wwn_show_attr_##_name); \
} while (0);
/* /*
* VPD page 0x80 Unit serial * VPD page 0x80 Unit serial
*/ */
static ssize_t target_core_dev_wwn_show_attr_vpd_unit_serial( static ssize_t target_wwn_vpd_unit_serial_show(struct config_item *item,
struct t10_wwn *t10_wwn, char *page)
char *page)
{ {
return sprintf(page, "T10 VPD Unit Serial Number: %s\n", return sprintf(page, "T10 VPD Unit Serial Number: %s\n",
&t10_wwn->unit_serial[0]); &to_t10_wwn(item)->unit_serial[0]);
} }
static ssize_t target_core_dev_wwn_store_attr_vpd_unit_serial( static ssize_t target_wwn_vpd_unit_serial_store(struct config_item *item,
struct t10_wwn *t10_wwn, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct t10_wwn *t10_wwn = to_t10_wwn(item);
struct se_device *dev = t10_wwn->t10_dev; struct se_device *dev = t10_wwn->t10_dev;
unsigned char buf[INQUIRY_VPD_SERIAL_LEN]; unsigned char buf[INQUIRY_VPD_SERIAL_LEN];
...@@ -1167,15 +1133,13 @@ static ssize_t target_core_dev_wwn_store_attr_vpd_unit_serial( ...@@ -1167,15 +1133,13 @@ static ssize_t target_core_dev_wwn_store_attr_vpd_unit_serial(
return count; return count;
} }
SE_DEV_WWN_ATTR(vpd_unit_serial, S_IRUGO | S_IWUSR);
/* /*
* VPD page 0x83 Protocol Identifier * VPD page 0x83 Protocol Identifier
*/ */
static ssize_t target_core_dev_wwn_show_attr_vpd_protocol_identifier( static ssize_t target_wwn_vpd_protocol_identifier_show(struct config_item *item,
struct t10_wwn *t10_wwn, char *page)
char *page)
{ {
struct t10_wwn *t10_wwn = to_t10_wwn(item);
struct t10_vpd *vpd; struct t10_vpd *vpd;
unsigned char buf[VPD_TMP_BUF_SIZE]; unsigned char buf[VPD_TMP_BUF_SIZE];
ssize_t len = 0; ssize_t len = 0;
...@@ -1199,25 +1163,15 @@ static ssize_t target_core_dev_wwn_show_attr_vpd_protocol_identifier( ...@@ -1199,25 +1163,15 @@ static ssize_t target_core_dev_wwn_show_attr_vpd_protocol_identifier(
return len; return len;
} }
static ssize_t target_core_dev_wwn_store_attr_vpd_protocol_identifier(
struct t10_wwn *t10_wwn,
const char *page,
size_t count)
{
return -ENOSYS;
}
SE_DEV_WWN_ATTR(vpd_protocol_identifier, S_IRUGO | S_IWUSR);
/* /*
* Generic wrapper for dumping VPD identifiers by association. * Generic wrapper for dumping VPD identifiers by association.
*/ */
#define DEF_DEV_WWN_ASSOC_SHOW(_name, _assoc) \ #define DEF_DEV_WWN_ASSOC_SHOW(_name, _assoc) \
static ssize_t target_core_dev_wwn_show_attr_##_name( \ static ssize_t target_wwn_##_name##_show(struct config_item *item, \
struct t10_wwn *t10_wwn, \ char *page) \
char *page) \
{ \ { \
struct t10_vpd *vpd; \ struct t10_wwn *t10_wwn = to_t10_wwn(item); \
struct t10_vpd *vpd; \
unsigned char buf[VPD_TMP_BUF_SIZE]; \ unsigned char buf[VPD_TMP_BUF_SIZE]; \
ssize_t len = 0; \ ssize_t len = 0; \
\ \
...@@ -1249,84 +1203,39 @@ static ssize_t target_core_dev_wwn_show_attr_##_name( \ ...@@ -1249,84 +1203,39 @@ static ssize_t target_core_dev_wwn_show_attr_##_name( \
return len; \ return len; \
} }
/* /* VPD page 0x83 Association: Logical Unit */
* VPD page 0x83 Association: Logical Unit
*/
DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_logical_unit, 0x00); DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_logical_unit, 0x00);
/* VPD page 0x83 Association: Target Port */
static ssize_t target_core_dev_wwn_store_attr_vpd_assoc_logical_unit(
struct t10_wwn *t10_wwn,
const char *page,
size_t count)
{
return -ENOSYS;
}
SE_DEV_WWN_ATTR(vpd_assoc_logical_unit, S_IRUGO | S_IWUSR);
/*
* VPD page 0x83 Association: Target Port
*/
DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_target_port, 0x10); DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_target_port, 0x10);
/* VPD page 0x83 Association: SCSI Target Device */
static ssize_t target_core_dev_wwn_store_attr_vpd_assoc_target_port(
struct t10_wwn *t10_wwn,
const char *page,
size_t count)
{
return -ENOSYS;
}
SE_DEV_WWN_ATTR(vpd_assoc_target_port, S_IRUGO | S_IWUSR);
/*
* VPD page 0x83 Association: SCSI Target Device
*/
DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_scsi_target_device, 0x20); DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_scsi_target_device, 0x20);
static ssize_t target_core_dev_wwn_store_attr_vpd_assoc_scsi_target_device( CONFIGFS_ATTR(target_wwn_, vpd_unit_serial);
struct t10_wwn *t10_wwn, CONFIGFS_ATTR_RO(target_wwn_, vpd_protocol_identifier);
const char *page, CONFIGFS_ATTR_RO(target_wwn_, vpd_assoc_logical_unit);
size_t count) CONFIGFS_ATTR_RO(target_wwn_, vpd_assoc_target_port);
{ CONFIGFS_ATTR_RO(target_wwn_, vpd_assoc_scsi_target_device);
return -ENOSYS;
}
SE_DEV_WWN_ATTR(vpd_assoc_scsi_target_device, S_IRUGO | S_IWUSR);
CONFIGFS_EATTR_OPS(target_core_dev_wwn, t10_wwn, t10_wwn_group);
static struct configfs_attribute *target_core_dev_wwn_attrs[] = { static struct configfs_attribute *target_core_dev_wwn_attrs[] = {
&target_core_dev_wwn_vpd_unit_serial.attr, &target_wwn_attr_vpd_unit_serial,
&target_core_dev_wwn_vpd_protocol_identifier.attr, &target_wwn_attr_vpd_protocol_identifier,
&target_core_dev_wwn_vpd_assoc_logical_unit.attr, &target_wwn_attr_vpd_assoc_logical_unit,
&target_core_dev_wwn_vpd_assoc_target_port.attr, &target_wwn_attr_vpd_assoc_target_port,
&target_core_dev_wwn_vpd_assoc_scsi_target_device.attr, &target_wwn_attr_vpd_assoc_scsi_target_device,
NULL, NULL,
}; };
static struct configfs_item_operations target_core_dev_wwn_ops = { TB_CIT_SETUP(dev_wwn, NULL, NULL, target_core_dev_wwn_attrs);
.show_attribute = target_core_dev_wwn_attr_show,
.store_attribute = target_core_dev_wwn_attr_store,
};
TB_CIT_SETUP(dev_wwn, &target_core_dev_wwn_ops, NULL, target_core_dev_wwn_attrs);
/* End functions for struct config_item_type tb_dev_wwn_cit */ /* End functions for struct config_item_type tb_dev_wwn_cit */
/* Start functions for struct config_item_type tb_dev_pr_cit */ /* Start functions for struct config_item_type tb_dev_pr_cit */
CONFIGFS_EATTR_STRUCT(target_core_dev_pr, se_device); static struct se_device *pr_to_dev(struct config_item *item)
#define SE_DEV_PR_ATTR(_name, _mode) \ {
static struct target_core_dev_pr_attribute target_core_dev_pr_##_name = \ return container_of(to_config_group(item), struct se_device,
__CONFIGFS_EATTR(_name, _mode, \ dev_pr_group);
target_core_dev_pr_show_attr_##_name, \ }
target_core_dev_pr_store_attr_##_name);
#define SE_DEV_PR_ATTR_RO(_name); \
static struct target_core_dev_pr_attribute target_core_dev_pr_##_name = \
__CONFIGFS_EATTR_RO(_name, \
target_core_dev_pr_show_attr_##_name);
static ssize_t target_core_dev_pr_show_spc3_res(struct se_device *dev, static ssize_t target_core_dev_pr_show_spc3_res(struct se_device *dev,
char *page) char *page)
...@@ -1367,9 +1276,9 @@ static ssize_t target_core_dev_pr_show_spc2_res(struct se_device *dev, ...@@ -1367,9 +1276,9 @@ static ssize_t target_core_dev_pr_show_spc2_res(struct se_device *dev,
return len; return len;
} }
static ssize_t target_core_dev_pr_show_attr_res_holder(struct se_device *dev, static ssize_t target_pr_res_holder_show(struct config_item *item, char *page)
char *page)
{ {
struct se_device *dev = pr_to_dev(item);
int ret; int ret;
if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
...@@ -1384,11 +1293,10 @@ static ssize_t target_core_dev_pr_show_attr_res_holder(struct se_device *dev, ...@@ -1384,11 +1293,10 @@ static ssize_t target_core_dev_pr_show_attr_res_holder(struct se_device *dev,
return ret; return ret;
} }
SE_DEV_PR_ATTR_RO(res_holder); static ssize_t target_pr_res_pr_all_tgt_pts_show(struct config_item *item,
char *page)
static ssize_t target_core_dev_pr_show_attr_res_pr_all_tgt_pts(
struct se_device *dev, char *page)
{ {
struct se_device *dev = pr_to_dev(item);
ssize_t len = 0; ssize_t len = 0;
spin_lock(&dev->dev_reservation_lock); spin_lock(&dev->dev_reservation_lock);
...@@ -1406,22 +1314,17 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_all_tgt_pts( ...@@ -1406,22 +1314,17 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_all_tgt_pts(
return len; return len;
} }
SE_DEV_PR_ATTR_RO(res_pr_all_tgt_pts); static ssize_t target_pr_res_pr_generation_show(struct config_item *item,
char *page)
static ssize_t target_core_dev_pr_show_attr_res_pr_generation(
struct se_device *dev, char *page)
{ {
return sprintf(page, "0x%08x\n", dev->t10_pr.pr_generation); return sprintf(page, "0x%08x\n", pr_to_dev(item)->t10_pr.pr_generation);
} }
SE_DEV_PR_ATTR_RO(res_pr_generation);
/* static ssize_t target_pr_res_pr_holder_tg_port_show(struct config_item *item,
* res_pr_holder_tg_port char *page)
*/
static ssize_t target_core_dev_pr_show_attr_res_pr_holder_tg_port(
struct se_device *dev, char *page)
{ {
struct se_device *dev = pr_to_dev(item);
struct se_node_acl *se_nacl; struct se_node_acl *se_nacl;
struct se_portal_group *se_tpg; struct se_portal_group *se_tpg;
struct t10_pr_registration *pr_reg; struct t10_pr_registration *pr_reg;
...@@ -1453,11 +1356,11 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_holder_tg_port( ...@@ -1453,11 +1356,11 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_holder_tg_port(
return len; return len;
} }
SE_DEV_PR_ATTR_RO(res_pr_holder_tg_port);
static ssize_t target_core_dev_pr_show_attr_res_pr_registered_i_pts( static ssize_t target_pr_res_pr_registered_i_pts_show(struct config_item *item,
struct se_device *dev, char *page) char *page)
{ {
struct se_device *dev = pr_to_dev(item);
const struct target_core_fabric_ops *tfo; const struct target_core_fabric_ops *tfo;
struct t10_pr_registration *pr_reg; struct t10_pr_registration *pr_reg;
unsigned char buf[384]; unsigned char buf[384];
...@@ -1495,11 +1398,9 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_registered_i_pts( ...@@ -1495,11 +1398,9 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_registered_i_pts(
return len; return len;
} }
SE_DEV_PR_ATTR_RO(res_pr_registered_i_pts); static ssize_t target_pr_res_pr_type_show(struct config_item *item, char *page)
static ssize_t target_core_dev_pr_show_attr_res_pr_type(
struct se_device *dev, char *page)
{ {
struct se_device *dev = pr_to_dev(item);
struct t10_pr_registration *pr_reg; struct t10_pr_registration *pr_reg;
ssize_t len = 0; ssize_t len = 0;
...@@ -1516,11 +1417,10 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_type( ...@@ -1516,11 +1417,10 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_type(
return len; return len;
} }
SE_DEV_PR_ATTR_RO(res_pr_type); static ssize_t target_pr_res_type_show(struct config_item *item, char *page)
static ssize_t target_core_dev_pr_show_attr_res_type(
struct se_device *dev, char *page)
{ {
struct se_device *dev = pr_to_dev(item);
if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
return sprintf(page, "SPC_PASSTHROUGH\n"); return sprintf(page, "SPC_PASSTHROUGH\n");
else if (dev->dev_reservation_flags & DRF_SPC2_RESERVATIONS) else if (dev->dev_reservation_flags & DRF_SPC2_RESERVATIONS)
...@@ -1529,11 +1429,11 @@ static ssize_t target_core_dev_pr_show_attr_res_type( ...@@ -1529,11 +1429,11 @@ static ssize_t target_core_dev_pr_show_attr_res_type(
return sprintf(page, "SPC3_PERSISTENT_RESERVATIONS\n"); return sprintf(page, "SPC3_PERSISTENT_RESERVATIONS\n");
} }
SE_DEV_PR_ATTR_RO(res_type); static ssize_t target_pr_res_aptpl_active_show(struct config_item *item,
char *page)
static ssize_t target_core_dev_pr_show_attr_res_aptpl_active(
struct se_device *dev, char *page)
{ {
struct se_device *dev = pr_to_dev(item);
if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
return 0; return 0;
...@@ -1541,14 +1441,11 @@ static ssize_t target_core_dev_pr_show_attr_res_aptpl_active( ...@@ -1541,14 +1441,11 @@ static ssize_t target_core_dev_pr_show_attr_res_aptpl_active(
(dev->t10_pr.pr_aptpl_active) ? "Activated" : "Disabled"); (dev->t10_pr.pr_aptpl_active) ? "Activated" : "Disabled");
} }
SE_DEV_PR_ATTR_RO(res_aptpl_active); static ssize_t target_pr_res_aptpl_metadata_show(struct config_item *item,
char *page)
/*
* res_aptpl_metadata
*/
static ssize_t target_core_dev_pr_show_attr_res_aptpl_metadata(
struct se_device *dev, char *page)
{ {
struct se_device *dev = pr_to_dev(item);
if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
return 0; return 0;
...@@ -1580,11 +1477,10 @@ static match_table_t tokens = { ...@@ -1580,11 +1477,10 @@ static match_table_t tokens = {
{Opt_err, NULL} {Opt_err, NULL}
}; };
static ssize_t target_core_dev_pr_store_attr_res_aptpl_metadata( static ssize_t target_pr_res_aptpl_metadata_store(struct config_item *item,
struct se_device *dev, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_device *dev = pr_to_dev(item);
unsigned char *i_fabric = NULL, *i_port = NULL, *isid = NULL; unsigned char *i_fabric = NULL, *i_port = NULL, *isid = NULL;
unsigned char *t_fabric = NULL, *t_port = NULL; unsigned char *t_fabric = NULL, *t_port = NULL;
char *orig, *ptr, *opts; char *orig, *ptr, *opts;
...@@ -1765,37 +1661,44 @@ static ssize_t target_core_dev_pr_store_attr_res_aptpl_metadata( ...@@ -1765,37 +1661,44 @@ static ssize_t target_core_dev_pr_store_attr_res_aptpl_metadata(
return (ret == 0) ? count : ret; return (ret == 0) ? count : ret;
} }
SE_DEV_PR_ATTR(res_aptpl_metadata, S_IRUGO | S_IWUSR);
CONFIGFS_EATTR_OPS(target_core_dev_pr, se_device, dev_pr_group); CONFIGFS_ATTR_RO(target_pr_, res_holder);
CONFIGFS_ATTR_RO(target_pr_, res_pr_all_tgt_pts);
CONFIGFS_ATTR_RO(target_pr_, res_pr_generation);
CONFIGFS_ATTR_RO(target_pr_, res_pr_holder_tg_port);
CONFIGFS_ATTR_RO(target_pr_, res_pr_registered_i_pts);
CONFIGFS_ATTR_RO(target_pr_, res_pr_type);
CONFIGFS_ATTR_RO(target_pr_, res_type);
CONFIGFS_ATTR_RO(target_pr_, res_aptpl_active);
CONFIGFS_ATTR(target_pr_, res_aptpl_metadata);
static struct configfs_attribute *target_core_dev_pr_attrs[] = { static struct configfs_attribute *target_core_dev_pr_attrs[] = {
&target_core_dev_pr_res_holder.attr, &target_pr_attr_res_holder,
&target_core_dev_pr_res_pr_all_tgt_pts.attr, &target_pr_attr_res_pr_all_tgt_pts,
&target_core_dev_pr_res_pr_generation.attr, &target_pr_attr_res_pr_generation,
&target_core_dev_pr_res_pr_holder_tg_port.attr, &target_pr_attr_res_pr_holder_tg_port,
&target_core_dev_pr_res_pr_registered_i_pts.attr, &target_pr_attr_res_pr_registered_i_pts,
&target_core_dev_pr_res_pr_type.attr, &target_pr_attr_res_pr_type,
&target_core_dev_pr_res_type.attr, &target_pr_attr_res_type,
&target_core_dev_pr_res_aptpl_active.attr, &target_pr_attr_res_aptpl_active,
&target_core_dev_pr_res_aptpl_metadata.attr, &target_pr_attr_res_aptpl_metadata,
NULL, NULL,
}; };
static struct configfs_item_operations target_core_dev_pr_ops = { TB_CIT_SETUP(dev_pr, NULL, NULL, target_core_dev_pr_attrs);
.show_attribute = target_core_dev_pr_attr_show,
.store_attribute = target_core_dev_pr_attr_store,
};
TB_CIT_SETUP(dev_pr, &target_core_dev_pr_ops, NULL, target_core_dev_pr_attrs);
/* End functions for struct config_item_type tb_dev_pr_cit */ /* End functions for struct config_item_type tb_dev_pr_cit */
/* Start functions for struct config_item_type tb_dev_cit */ /* Start functions for struct config_item_type tb_dev_cit */
static ssize_t target_core_show_dev_info(void *p, char *page) static inline struct se_device *to_device(struct config_item *item)
{
return container_of(to_config_group(item), struct se_device, dev_group);
}
static ssize_t target_dev_info_show(struct config_item *item, char *page)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
int bl = 0; int bl = 0;
ssize_t read_bytes = 0; ssize_t read_bytes = 0;
...@@ -1806,35 +1709,17 @@ static ssize_t target_core_show_dev_info(void *p, char *page) ...@@ -1806,35 +1709,17 @@ static ssize_t target_core_show_dev_info(void *p, char *page)
return read_bytes; return read_bytes;
} }
static struct target_core_configfs_attribute target_core_attr_dev_info = { static ssize_t target_dev_control_store(struct config_item *item,
.attr = { .ca_owner = THIS_MODULE, const char *page, size_t count)
.ca_name = "info",
.ca_mode = S_IRUGO },
.show = target_core_show_dev_info,
.store = NULL,
};
static ssize_t target_core_store_dev_control(
void *p,
const char *page,
size_t count)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
return dev->transport->set_configfs_dev_params(dev, page, count); return dev->transport->set_configfs_dev_params(dev, page, count);
} }
static struct target_core_configfs_attribute target_core_attr_dev_control = { static ssize_t target_dev_alias_show(struct config_item *item, char *page)
.attr = { .ca_owner = THIS_MODULE,
.ca_name = "control",
.ca_mode = S_IWUSR },
.show = NULL,
.store = target_core_store_dev_control,
};
static ssize_t target_core_show_dev_alias(void *p, char *page)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
if (!(dev->dev_flags & DF_USING_ALIAS)) if (!(dev->dev_flags & DF_USING_ALIAS))
return 0; return 0;
...@@ -1842,12 +1727,10 @@ static ssize_t target_core_show_dev_alias(void *p, char *page) ...@@ -1842,12 +1727,10 @@ static ssize_t target_core_show_dev_alias(void *p, char *page)
return snprintf(page, PAGE_SIZE, "%s\n", dev->dev_alias); return snprintf(page, PAGE_SIZE, "%s\n", dev->dev_alias);
} }
static ssize_t target_core_store_dev_alias( static ssize_t target_dev_alias_store(struct config_item *item,
void *p, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
struct se_hba *hba = dev->se_hba; struct se_hba *hba = dev->se_hba;
ssize_t read_bytes; ssize_t read_bytes;
...@@ -1874,17 +1757,9 @@ static ssize_t target_core_store_dev_alias( ...@@ -1874,17 +1757,9 @@ static ssize_t target_core_store_dev_alias(
return read_bytes; return read_bytes;
} }
static struct target_core_configfs_attribute target_core_attr_dev_alias = { static ssize_t target_dev_udev_path_show(struct config_item *item, char *page)
.attr = { .ca_owner = THIS_MODULE,
.ca_name = "alias",
.ca_mode = S_IRUGO | S_IWUSR },
.show = target_core_show_dev_alias,
.store = target_core_store_dev_alias,
};
static ssize_t target_core_show_dev_udev_path(void *p, char *page)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
if (!(dev->dev_flags & DF_USING_UDEV_PATH)) if (!(dev->dev_flags & DF_USING_UDEV_PATH))
return 0; return 0;
...@@ -1892,12 +1767,10 @@ static ssize_t target_core_show_dev_udev_path(void *p, char *page) ...@@ -1892,12 +1767,10 @@ static ssize_t target_core_show_dev_udev_path(void *p, char *page)
return snprintf(page, PAGE_SIZE, "%s\n", dev->udev_path); return snprintf(page, PAGE_SIZE, "%s\n", dev->udev_path);
} }
static ssize_t target_core_store_dev_udev_path( static ssize_t target_dev_udev_path_store(struct config_item *item,
void *p, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
struct se_hba *hba = dev->se_hba; struct se_hba *hba = dev->se_hba;
ssize_t read_bytes; ssize_t read_bytes;
...@@ -1925,27 +1798,17 @@ static ssize_t target_core_store_dev_udev_path( ...@@ -1925,27 +1798,17 @@ static ssize_t target_core_store_dev_udev_path(
return read_bytes; return read_bytes;
} }
static struct target_core_configfs_attribute target_core_attr_dev_udev_path = { static ssize_t target_dev_enable_show(struct config_item *item, char *page)
.attr = { .ca_owner = THIS_MODULE,
.ca_name = "udev_path",
.ca_mode = S_IRUGO | S_IWUSR },
.show = target_core_show_dev_udev_path,
.store = target_core_store_dev_udev_path,
};
static ssize_t target_core_show_dev_enable(void *p, char *page)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
return snprintf(page, PAGE_SIZE, "%d\n", !!(dev->dev_flags & DF_CONFIGURED)); return snprintf(page, PAGE_SIZE, "%d\n", !!(dev->dev_flags & DF_CONFIGURED));
} }
static ssize_t target_core_store_dev_enable( static ssize_t target_dev_enable_store(struct config_item *item,
void *p, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
char *ptr; char *ptr;
int ret; int ret;
...@@ -1962,17 +1825,9 @@ static ssize_t target_core_store_dev_enable( ...@@ -1962,17 +1825,9 @@ static ssize_t target_core_store_dev_enable(
return count; return count;
} }
static struct target_core_configfs_attribute target_core_attr_dev_enable = { static ssize_t target_dev_alua_lu_gp_show(struct config_item *item, char *page)
.attr = { .ca_owner = THIS_MODULE,
.ca_name = "enable",
.ca_mode = S_IRUGO | S_IWUSR },
.show = target_core_show_dev_enable,
.store = target_core_store_dev_enable,
};
static ssize_t target_core_show_alua_lu_gp(void *p, char *page)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
struct config_item *lu_ci; struct config_item *lu_ci;
struct t10_alua_lu_gp *lu_gp; struct t10_alua_lu_gp *lu_gp;
struct t10_alua_lu_gp_member *lu_gp_mem; struct t10_alua_lu_gp_member *lu_gp_mem;
...@@ -1994,12 +1849,10 @@ static ssize_t target_core_show_alua_lu_gp(void *p, char *page) ...@@ -1994,12 +1849,10 @@ static ssize_t target_core_show_alua_lu_gp(void *p, char *page)
return len; return len;
} }
static ssize_t target_core_store_alua_lu_gp( static ssize_t target_dev_alua_lu_gp_store(struct config_item *item,
void *p, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
struct se_hba *hba = dev->se_hba; struct se_hba *hba = dev->se_hba;
struct t10_alua_lu_gp *lu_gp = NULL, *lu_gp_new = NULL; struct t10_alua_lu_gp *lu_gp = NULL, *lu_gp_new = NULL;
struct t10_alua_lu_gp_member *lu_gp_mem; struct t10_alua_lu_gp_member *lu_gp_mem;
...@@ -2076,17 +1929,9 @@ static ssize_t target_core_store_alua_lu_gp( ...@@ -2076,17 +1929,9 @@ static ssize_t target_core_store_alua_lu_gp(
return count; return count;
} }
static struct target_core_configfs_attribute target_core_attr_dev_alua_lu_gp = { static ssize_t target_dev_lba_map_show(struct config_item *item, char *page)
.attr = { .ca_owner = THIS_MODULE,
.ca_name = "alua_lu_gp",
.ca_mode = S_IRUGO | S_IWUSR },
.show = target_core_show_alua_lu_gp,
.store = target_core_store_alua_lu_gp,
};
static ssize_t target_core_show_dev_lba_map(void *p, char *page)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
struct t10_alua_lba_map *map; struct t10_alua_lba_map *map;
struct t10_alua_lba_map_member *mem; struct t10_alua_lba_map_member *mem;
char *b = page; char *b = page;
...@@ -2129,12 +1974,10 @@ static ssize_t target_core_show_dev_lba_map(void *p, char *page) ...@@ -2129,12 +1974,10 @@ static ssize_t target_core_show_dev_lba_map(void *p, char *page)
return bl; return bl;
} }
static ssize_t target_core_store_dev_lba_map( static ssize_t target_dev_lba_map_store(struct config_item *item,
void *p, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_device *dev = p; struct se_device *dev = to_device(item);
struct t10_alua_lba_map *lba_map = NULL; struct t10_alua_lba_map *lba_map = NULL;
struct list_head lba_list; struct list_head lba_list;
char *map_entries, *ptr; char *map_entries, *ptr;
...@@ -2246,22 +2089,22 @@ static ssize_t target_core_store_dev_lba_map( ...@@ -2246,22 +2089,22 @@ static ssize_t target_core_store_dev_lba_map(
return count; return count;
} }
static struct target_core_configfs_attribute target_core_attr_dev_lba_map = { CONFIGFS_ATTR_RO(target_dev_, info);
.attr = { .ca_owner = THIS_MODULE, CONFIGFS_ATTR_WO(target_dev_, control);
.ca_name = "lba_map", CONFIGFS_ATTR(target_dev_, alias);
.ca_mode = S_IRUGO | S_IWUSR }, CONFIGFS_ATTR(target_dev_, udev_path);
.show = target_core_show_dev_lba_map, CONFIGFS_ATTR(target_dev_, enable);
.store = target_core_store_dev_lba_map, CONFIGFS_ATTR(target_dev_, alua_lu_gp);
}; CONFIGFS_ATTR(target_dev_, lba_map);
static struct configfs_attribute *target_core_dev_attrs[] = { static struct configfs_attribute *target_core_dev_attrs[] = {
&target_core_attr_dev_info.attr, &target_dev_attr_info,
&target_core_attr_dev_control.attr, &target_dev_attr_control,
&target_core_attr_dev_alias.attr, &target_dev_attr_alias,
&target_core_attr_dev_udev_path.attr, &target_dev_attr_udev_path,
&target_core_attr_dev_enable.attr, &target_dev_attr_enable,
&target_core_attr_dev_alua_lu_gp.attr, &target_dev_attr_alua_lu_gp,
&target_core_attr_dev_lba_map.attr, &target_dev_attr_lba_map,
NULL, NULL,
}; };
...@@ -2275,42 +2118,8 @@ static void target_core_dev_release(struct config_item *item) ...@@ -2275,42 +2118,8 @@ static void target_core_dev_release(struct config_item *item)
target_free_device(dev); target_free_device(dev);
} }
static ssize_t target_core_dev_show(struct config_item *item,
struct configfs_attribute *attr,
char *page)
{
struct config_group *dev_cg = to_config_group(item);
struct se_device *dev =
container_of(dev_cg, struct se_device, dev_group);
struct target_core_configfs_attribute *tc_attr = container_of(
attr, struct target_core_configfs_attribute, attr);
if (!tc_attr->show)
return -EINVAL;
return tc_attr->show(dev, page);
}
static ssize_t target_core_dev_store(struct config_item *item,
struct configfs_attribute *attr,
const char *page, size_t count)
{
struct config_group *dev_cg = to_config_group(item);
struct se_device *dev =
container_of(dev_cg, struct se_device, dev_group);
struct target_core_configfs_attribute *tc_attr = container_of(
attr, struct target_core_configfs_attribute, attr);
if (!tc_attr->store)
return -EINVAL;
return tc_attr->store(dev, page, count);
}
static struct configfs_item_operations target_core_dev_item_ops = { static struct configfs_item_operations target_core_dev_item_ops = {
.release = target_core_dev_release, .release = target_core_dev_release,
.show_attribute = target_core_dev_show,
.store_attribute = target_core_dev_store,
}; };
TB_CIT_SETUP(dev, &target_core_dev_item_ops, NULL, target_core_dev_attrs); TB_CIT_SETUP(dev, &target_core_dev_item_ops, NULL, target_core_dev_attrs);
...@@ -2319,38 +2128,25 @@ TB_CIT_SETUP(dev, &target_core_dev_item_ops, NULL, target_core_dev_attrs); ...@@ -2319,38 +2128,25 @@ TB_CIT_SETUP(dev, &target_core_dev_item_ops, NULL, target_core_dev_attrs);
/* Start functions for struct config_item_type target_core_alua_lu_gp_cit */ /* Start functions for struct config_item_type target_core_alua_lu_gp_cit */
CONFIGFS_EATTR_STRUCT(target_core_alua_lu_gp, t10_alua_lu_gp); static inline struct t10_alua_lu_gp *to_lu_gp(struct config_item *item)
#define SE_DEV_ALUA_LU_ATTR(_name, _mode) \ {
static struct target_core_alua_lu_gp_attribute \ return container_of(to_config_group(item), struct t10_alua_lu_gp,
target_core_alua_lu_gp_##_name = \ lu_gp_group);
__CONFIGFS_EATTR(_name, _mode, \ }
target_core_alua_lu_gp_show_attr_##_name, \
target_core_alua_lu_gp_store_attr_##_name);
#define SE_DEV_ALUA_LU_ATTR_RO(_name) \
static struct target_core_alua_lu_gp_attribute \
target_core_alua_lu_gp_##_name = \
__CONFIGFS_EATTR_RO(_name, \
target_core_alua_lu_gp_show_attr_##_name);
/* static ssize_t target_lu_gp_lu_gp_id_show(struct config_item *item, char *page)
* lu_gp_id
*/
static ssize_t target_core_alua_lu_gp_show_attr_lu_gp_id(
struct t10_alua_lu_gp *lu_gp,
char *page)
{ {
struct t10_alua_lu_gp *lu_gp = to_lu_gp(item);
if (!lu_gp->lu_gp_valid_id) if (!lu_gp->lu_gp_valid_id)
return 0; return 0;
return sprintf(page, "%hu\n", lu_gp->lu_gp_id); return sprintf(page, "%hu\n", lu_gp->lu_gp_id);
} }
static ssize_t target_core_alua_lu_gp_store_attr_lu_gp_id( static ssize_t target_lu_gp_lu_gp_id_store(struct config_item *item,
struct t10_alua_lu_gp *lu_gp, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct t10_alua_lu_gp *lu_gp = to_lu_gp(item);
struct config_group *alua_lu_gp_cg = &lu_gp->lu_gp_group; struct config_group *alua_lu_gp_cg = &lu_gp->lu_gp_group;
unsigned long lu_gp_id; unsigned long lu_gp_id;
int ret; int ret;
...@@ -2379,15 +2175,9 @@ static ssize_t target_core_alua_lu_gp_store_attr_lu_gp_id( ...@@ -2379,15 +2175,9 @@ static ssize_t target_core_alua_lu_gp_store_attr_lu_gp_id(
return count; return count;
} }
SE_DEV_ALUA_LU_ATTR(lu_gp_id, S_IRUGO | S_IWUSR); static ssize_t target_lu_gp_members_show(struct config_item *item, char *page)
/*
* members
*/
static ssize_t target_core_alua_lu_gp_show_attr_members(
struct t10_alua_lu_gp *lu_gp,
char *page)
{ {
struct t10_alua_lu_gp *lu_gp = to_lu_gp(item);
struct se_device *dev; struct se_device *dev;
struct se_hba *hba; struct se_hba *hba;
struct t10_alua_lu_gp_member *lu_gp_mem; struct t10_alua_lu_gp_member *lu_gp_mem;
...@@ -2419,13 +2209,12 @@ static ssize_t target_core_alua_lu_gp_show_attr_members( ...@@ -2419,13 +2209,12 @@ static ssize_t target_core_alua_lu_gp_show_attr_members(
return len; return len;
} }
SE_DEV_ALUA_LU_ATTR_RO(members); CONFIGFS_ATTR(target_lu_gp_, lu_gp_id);
CONFIGFS_ATTR_RO(target_lu_gp_, members);
CONFIGFS_EATTR_OPS(target_core_alua_lu_gp, t10_alua_lu_gp, lu_gp_group);
static struct configfs_attribute *target_core_alua_lu_gp_attrs[] = { static struct configfs_attribute *target_core_alua_lu_gp_attrs[] = {
&target_core_alua_lu_gp_lu_gp_id.attr, &target_lu_gp_attr_lu_gp_id,
&target_core_alua_lu_gp_members.attr, &target_lu_gp_attr_members,
NULL, NULL,
}; };
...@@ -2439,8 +2228,6 @@ static void target_core_alua_lu_gp_release(struct config_item *item) ...@@ -2439,8 +2228,6 @@ static void target_core_alua_lu_gp_release(struct config_item *item)
static struct configfs_item_operations target_core_alua_lu_gp_ops = { static struct configfs_item_operations target_core_alua_lu_gp_ops = {
.release = target_core_alua_lu_gp_release, .release = target_core_alua_lu_gp_release,
.show_attribute = target_core_alua_lu_gp_attr_show,
.store_attribute = target_core_alua_lu_gp_attr_store,
}; };
static struct config_item_type target_core_alua_lu_gp_cit = { static struct config_item_type target_core_alua_lu_gp_cit = {
...@@ -2511,36 +2298,23 @@ static struct config_item_type target_core_alua_lu_gps_cit = { ...@@ -2511,36 +2298,23 @@ static struct config_item_type target_core_alua_lu_gps_cit = {
/* Start functions for struct config_item_type target_core_alua_tg_pt_gp_cit */ /* Start functions for struct config_item_type target_core_alua_tg_pt_gp_cit */
CONFIGFS_EATTR_STRUCT(target_core_alua_tg_pt_gp, t10_alua_tg_pt_gp); static inline struct t10_alua_tg_pt_gp *to_tg_pt_gp(struct config_item *item)
#define SE_DEV_ALUA_TG_PT_ATTR(_name, _mode) \ {
static struct target_core_alua_tg_pt_gp_attribute \ return container_of(to_config_group(item), struct t10_alua_tg_pt_gp,
target_core_alua_tg_pt_gp_##_name = \ tg_pt_gp_group);
__CONFIGFS_EATTR(_name, _mode, \ }
target_core_alua_tg_pt_gp_show_attr_##_name, \
target_core_alua_tg_pt_gp_store_attr_##_name);
#define SE_DEV_ALUA_TG_PT_ATTR_RO(_name) \
static struct target_core_alua_tg_pt_gp_attribute \
target_core_alua_tg_pt_gp_##_name = \
__CONFIGFS_EATTR_RO(_name, \
target_core_alua_tg_pt_gp_show_attr_##_name);
/* static ssize_t target_tg_pt_gp_alua_access_state_show(struct config_item *item,
* alua_access_state char *page)
*/
static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_access_state(
struct t10_alua_tg_pt_gp *tg_pt_gp,
char *page)
{ {
return sprintf(page, "%d\n", return sprintf(page, "%d\n",
atomic_read(&tg_pt_gp->tg_pt_gp_alua_access_state)); atomic_read(&to_tg_pt_gp(item)->tg_pt_gp_alua_access_state));
} }
static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_state( static ssize_t target_tg_pt_gp_alua_access_state_store(struct config_item *item,
struct t10_alua_tg_pt_gp *tg_pt_gp, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
struct se_device *dev = tg_pt_gp->tg_pt_gp_dev; struct se_device *dev = tg_pt_gp->tg_pt_gp_dev;
unsigned long tmp; unsigned long tmp;
int new_state, ret; int new_state, ret;
...@@ -2582,24 +2356,18 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_state( ...@@ -2582,24 +2356,18 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_state(
return (!ret) ? count : -EINVAL; return (!ret) ? count : -EINVAL;
} }
SE_DEV_ALUA_TG_PT_ATTR(alua_access_state, S_IRUGO | S_IWUSR); static ssize_t target_tg_pt_gp_alua_access_status_show(struct config_item *item,
char *page)
/*
* alua_access_status
*/
static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_access_status(
struct t10_alua_tg_pt_gp *tg_pt_gp,
char *page)
{ {
struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
return sprintf(page, "%s\n", return sprintf(page, "%s\n",
core_alua_dump_status(tg_pt_gp->tg_pt_gp_alua_access_status)); core_alua_dump_status(tg_pt_gp->tg_pt_gp_alua_access_status));
} }
static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_status( static ssize_t target_tg_pt_gp_alua_access_status_store(
struct t10_alua_tg_pt_gp *tg_pt_gp, struct config_item *item, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
unsigned long tmp; unsigned long tmp;
int new_status, ret; int new_status, ret;
...@@ -2630,43 +2398,31 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_status( ...@@ -2630,43 +2398,31 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_status(
return count; return count;
} }
SE_DEV_ALUA_TG_PT_ATTR(alua_access_status, S_IRUGO | S_IWUSR); static ssize_t target_tg_pt_gp_alua_access_type_show(struct config_item *item,
char *page)
/*
* alua_access_type
*/
static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_access_type(
struct t10_alua_tg_pt_gp *tg_pt_gp,
char *page)
{ {
return core_alua_show_access_type(tg_pt_gp, page); return core_alua_show_access_type(to_tg_pt_gp(item), page);
} }
static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_type( static ssize_t target_tg_pt_gp_alua_access_type_store(struct config_item *item,
struct t10_alua_tg_pt_gp *tg_pt_gp, const char *page, size_t count)
const char *page,
size_t count)
{ {
return core_alua_store_access_type(tg_pt_gp, page, count); return core_alua_store_access_type(to_tg_pt_gp(item), page, count);
} }
SE_DEV_ALUA_TG_PT_ATTR(alua_access_type, S_IRUGO | S_IWUSR); #define ALUA_SUPPORTED_STATE_ATTR(_name, _bit) \
static ssize_t target_tg_pt_gp_alua_support_##_name##_show( \
/* struct config_item *item, char *p) \
* alua_supported_states
*/
#define SE_DEV_ALUA_SUPPORT_STATE_SHOW(_name, _var, _bit) \
static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_support_##_name( \
struct t10_alua_tg_pt_gp *t, char *p) \
{ \ { \
return sprintf(p, "%d\n", !!(t->_var & _bit)); \ struct t10_alua_tg_pt_gp *t = to_tg_pt_gp(item); \
} return sprintf(p, "%d\n", \
!!(t->tg_pt_gp_alua_supported_states & _bit)); \
#define SE_DEV_ALUA_SUPPORT_STATE_STORE(_name, _var, _bit) \ } \
static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_support_##_name(\ \
struct t10_alua_tg_pt_gp *t, const char *p, size_t c) \ static ssize_t target_tg_pt_gp_alua_support_##_name##_store( \
struct config_item *item, const char *p, size_t c) \
{ \ { \
struct t10_alua_tg_pt_gp *t = to_tg_pt_gp(item); \
unsigned long tmp; \ unsigned long tmp; \
int ret; \ int ret; \
\ \
...@@ -2687,70 +2443,32 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_support_##_name(\ ...@@ -2687,70 +2443,32 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_support_##_name(\
return -EINVAL; \ return -EINVAL; \
} \ } \
if (tmp) \ if (tmp) \
t->_var |= _bit; \ t->tg_pt_gp_alua_supported_states |= _bit; \
else \ else \
t->_var &= ~_bit; \ t->tg_pt_gp_alua_supported_states &= ~_bit; \
\ \
return c; \ return c; \
} }
SE_DEV_ALUA_SUPPORT_STATE_SHOW(transitioning, ALUA_SUPPORTED_STATE_ATTR(transitioning, ALUA_T_SUP);
tg_pt_gp_alua_supported_states, ALUA_T_SUP); ALUA_SUPPORTED_STATE_ATTR(offline, ALUA_O_SUP);
SE_DEV_ALUA_SUPPORT_STATE_STORE(transitioning, ALUA_SUPPORTED_STATE_ATTR(lba_dependent, ALUA_LBD_SUP);
tg_pt_gp_alua_supported_states, ALUA_T_SUP); ALUA_SUPPORTED_STATE_ATTR(unavailable, ALUA_U_SUP);
SE_DEV_ALUA_TG_PT_ATTR(alua_support_transitioning, S_IRUGO | S_IWUSR); ALUA_SUPPORTED_STATE_ATTR(standby, ALUA_S_SUP);
ALUA_SUPPORTED_STATE_ATTR(active_optimized, ALUA_AO_SUP);
SE_DEV_ALUA_SUPPORT_STATE_SHOW(offline, ALUA_SUPPORTED_STATE_ATTR(active_nonoptimized, ALUA_AN_SUP);
tg_pt_gp_alua_supported_states, ALUA_O_SUP);
SE_DEV_ALUA_SUPPORT_STATE_STORE(offline,
tg_pt_gp_alua_supported_states, ALUA_O_SUP);
SE_DEV_ALUA_TG_PT_ATTR(alua_support_offline, S_IRUGO | S_IWUSR);
SE_DEV_ALUA_SUPPORT_STATE_SHOW(lba_dependent,
tg_pt_gp_alua_supported_states, ALUA_LBD_SUP);
SE_DEV_ALUA_SUPPORT_STATE_STORE(lba_dependent,
tg_pt_gp_alua_supported_states, ALUA_LBD_SUP);
SE_DEV_ALUA_TG_PT_ATTR(alua_support_lba_dependent, S_IRUGO);
SE_DEV_ALUA_SUPPORT_STATE_SHOW(unavailable,
tg_pt_gp_alua_supported_states, ALUA_U_SUP);
SE_DEV_ALUA_SUPPORT_STATE_STORE(unavailable,
tg_pt_gp_alua_supported_states, ALUA_U_SUP);
SE_DEV_ALUA_TG_PT_ATTR(alua_support_unavailable, S_IRUGO | S_IWUSR);
SE_DEV_ALUA_SUPPORT_STATE_SHOW(standby,
tg_pt_gp_alua_supported_states, ALUA_S_SUP);
SE_DEV_ALUA_SUPPORT_STATE_STORE(standby,
tg_pt_gp_alua_supported_states, ALUA_S_SUP);
SE_DEV_ALUA_TG_PT_ATTR(alua_support_standby, S_IRUGO | S_IWUSR);
SE_DEV_ALUA_SUPPORT_STATE_SHOW(active_optimized,
tg_pt_gp_alua_supported_states, ALUA_AO_SUP);
SE_DEV_ALUA_SUPPORT_STATE_STORE(active_optimized,
tg_pt_gp_alua_supported_states, ALUA_AO_SUP);
SE_DEV_ALUA_TG_PT_ATTR(alua_support_active_optimized, S_IRUGO | S_IWUSR);
SE_DEV_ALUA_SUPPORT_STATE_SHOW(active_nonoptimized,
tg_pt_gp_alua_supported_states, ALUA_AN_SUP);
SE_DEV_ALUA_SUPPORT_STATE_STORE(active_nonoptimized,
tg_pt_gp_alua_supported_states, ALUA_AN_SUP);
SE_DEV_ALUA_TG_PT_ATTR(alua_support_active_nonoptimized, S_IRUGO | S_IWUSR);
/* static ssize_t target_tg_pt_gp_alua_write_metadata_show(
* alua_write_metadata struct config_item *item, char *page)
*/
static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_write_metadata(
struct t10_alua_tg_pt_gp *tg_pt_gp,
char *page)
{ {
return sprintf(page, "%d\n", tg_pt_gp->tg_pt_gp_write_metadata); return sprintf(page, "%d\n",
to_tg_pt_gp(item)->tg_pt_gp_write_metadata);
} }
static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_write_metadata( static ssize_t target_tg_pt_gp_alua_write_metadata_store(
struct t10_alua_tg_pt_gp *tg_pt_gp, struct config_item *item, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
unsigned long tmp; unsigned long tmp;
int ret; int ret;
...@@ -2770,110 +2488,71 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_write_metadata( ...@@ -2770,110 +2488,71 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_write_metadata(
return count; return count;
} }
SE_DEV_ALUA_TG_PT_ATTR(alua_write_metadata, S_IRUGO | S_IWUSR); static ssize_t target_tg_pt_gp_nonop_delay_msecs_show(struct config_item *item,
char *page)
/*
* nonop_delay_msecs
*/
static ssize_t target_core_alua_tg_pt_gp_show_attr_nonop_delay_msecs(
struct t10_alua_tg_pt_gp *tg_pt_gp,
char *page)
{ {
return core_alua_show_nonop_delay_msecs(tg_pt_gp, page); return core_alua_show_nonop_delay_msecs(to_tg_pt_gp(item), page);
} }
static ssize_t target_core_alua_tg_pt_gp_store_attr_nonop_delay_msecs( static ssize_t target_tg_pt_gp_nonop_delay_msecs_store(struct config_item *item,
struct t10_alua_tg_pt_gp *tg_pt_gp, const char *page, size_t count)
const char *page,
size_t count)
{ {
return core_alua_store_nonop_delay_msecs(tg_pt_gp, page, count); return core_alua_store_nonop_delay_msecs(to_tg_pt_gp(item), page,
count);
} }
SE_DEV_ALUA_TG_PT_ATTR(nonop_delay_msecs, S_IRUGO | S_IWUSR); static ssize_t target_tg_pt_gp_trans_delay_msecs_show(struct config_item *item,
char *page)
/*
* trans_delay_msecs
*/
static ssize_t target_core_alua_tg_pt_gp_show_attr_trans_delay_msecs(
struct t10_alua_tg_pt_gp *tg_pt_gp,
char *page)
{ {
return core_alua_show_trans_delay_msecs(tg_pt_gp, page); return core_alua_show_trans_delay_msecs(to_tg_pt_gp(item), page);
} }
static ssize_t target_core_alua_tg_pt_gp_store_attr_trans_delay_msecs( static ssize_t target_tg_pt_gp_trans_delay_msecs_store(struct config_item *item,
struct t10_alua_tg_pt_gp *tg_pt_gp, const char *page, size_t count)
const char *page,
size_t count)
{ {
return core_alua_store_trans_delay_msecs(tg_pt_gp, page, count); return core_alua_store_trans_delay_msecs(to_tg_pt_gp(item), page,
count);
} }
SE_DEV_ALUA_TG_PT_ATTR(trans_delay_msecs, S_IRUGO | S_IWUSR); static ssize_t target_tg_pt_gp_implicit_trans_secs_show(
struct config_item *item, char *page)
/*
* implicit_trans_secs
*/
static ssize_t target_core_alua_tg_pt_gp_show_attr_implicit_trans_secs(
struct t10_alua_tg_pt_gp *tg_pt_gp,
char *page)
{ {
return core_alua_show_implicit_trans_secs(tg_pt_gp, page); return core_alua_show_implicit_trans_secs(to_tg_pt_gp(item), page);
} }
static ssize_t target_core_alua_tg_pt_gp_store_attr_implicit_trans_secs( static ssize_t target_tg_pt_gp_implicit_trans_secs_store(
struct t10_alua_tg_pt_gp *tg_pt_gp, struct config_item *item, const char *page, size_t count)
const char *page,
size_t count)
{ {
return core_alua_store_implicit_trans_secs(tg_pt_gp, page, count); return core_alua_store_implicit_trans_secs(to_tg_pt_gp(item), page,
count);
} }
SE_DEV_ALUA_TG_PT_ATTR(implicit_trans_secs, S_IRUGO | S_IWUSR); static ssize_t target_tg_pt_gp_preferred_show(struct config_item *item,
char *page)
/*
* preferred
*/
static ssize_t target_core_alua_tg_pt_gp_show_attr_preferred(
struct t10_alua_tg_pt_gp *tg_pt_gp,
char *page)
{ {
return core_alua_show_preferred_bit(tg_pt_gp, page); return core_alua_show_preferred_bit(to_tg_pt_gp(item), page);
} }
static ssize_t target_core_alua_tg_pt_gp_store_attr_preferred( static ssize_t target_tg_pt_gp_preferred_store(struct config_item *item,
struct t10_alua_tg_pt_gp *tg_pt_gp, const char *page, size_t count)
const char *page,
size_t count)
{ {
return core_alua_store_preferred_bit(tg_pt_gp, page, count); return core_alua_store_preferred_bit(to_tg_pt_gp(item), page, count);
} }
SE_DEV_ALUA_TG_PT_ATTR(preferred, S_IRUGO | S_IWUSR); static ssize_t target_tg_pt_gp_tg_pt_gp_id_show(struct config_item *item,
char *page)
/*
* tg_pt_gp_id
*/
static ssize_t target_core_alua_tg_pt_gp_show_attr_tg_pt_gp_id(
struct t10_alua_tg_pt_gp *tg_pt_gp,
char *page)
{ {
struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
if (!tg_pt_gp->tg_pt_gp_valid_id) if (!tg_pt_gp->tg_pt_gp_valid_id)
return 0; return 0;
return sprintf(page, "%hu\n", tg_pt_gp->tg_pt_gp_id); return sprintf(page, "%hu\n", tg_pt_gp->tg_pt_gp_id);
} }
static ssize_t target_core_alua_tg_pt_gp_store_attr_tg_pt_gp_id( static ssize_t target_tg_pt_gp_tg_pt_gp_id_store(struct config_item *item,
struct t10_alua_tg_pt_gp *tg_pt_gp, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
struct config_group *alua_tg_pt_gp_cg = &tg_pt_gp->tg_pt_gp_group; struct config_group *alua_tg_pt_gp_cg = &tg_pt_gp->tg_pt_gp_group;
unsigned long tg_pt_gp_id; unsigned long tg_pt_gp_id;
int ret; int ret;
...@@ -2902,15 +2581,10 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_tg_pt_gp_id( ...@@ -2902,15 +2581,10 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_tg_pt_gp_id(
return count; return count;
} }
SE_DEV_ALUA_TG_PT_ATTR(tg_pt_gp_id, S_IRUGO | S_IWUSR); static ssize_t target_tg_pt_gp_members_show(struct config_item *item,
char *page)
/*
* members
*/
static ssize_t target_core_alua_tg_pt_gp_show_attr_members(
struct t10_alua_tg_pt_gp *tg_pt_gp,
char *page)
{ {
struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
struct se_lun *lun; struct se_lun *lun;
ssize_t len = 0, cur_len; ssize_t len = 0, cur_len;
unsigned char buf[TG_PT_GROUP_NAME_BUF]; unsigned char buf[TG_PT_GROUP_NAME_BUF];
...@@ -2942,29 +2616,42 @@ static ssize_t target_core_alua_tg_pt_gp_show_attr_members( ...@@ -2942,29 +2616,42 @@ static ssize_t target_core_alua_tg_pt_gp_show_attr_members(
return len; return len;
} }
SE_DEV_ALUA_TG_PT_ATTR_RO(members); CONFIGFS_ATTR(target_tg_pt_gp_, alua_access_state);
CONFIGFS_ATTR(target_tg_pt_gp_, alua_access_status);
CONFIGFS_EATTR_OPS(target_core_alua_tg_pt_gp, t10_alua_tg_pt_gp, CONFIGFS_ATTR(target_tg_pt_gp_, alua_access_type);
tg_pt_gp_group); CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_transitioning);
CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_offline);
CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_lba_dependent);
CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_unavailable);
CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_standby);
CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_active_optimized);
CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_active_nonoptimized);
CONFIGFS_ATTR(target_tg_pt_gp_, alua_write_metadata);
CONFIGFS_ATTR(target_tg_pt_gp_, nonop_delay_msecs);
CONFIGFS_ATTR(target_tg_pt_gp_, trans_delay_msecs);
CONFIGFS_ATTR(target_tg_pt_gp_, implicit_trans_secs);
CONFIGFS_ATTR(target_tg_pt_gp_, preferred);
CONFIGFS_ATTR(target_tg_pt_gp_, tg_pt_gp_id);
CONFIGFS_ATTR_RO(target_tg_pt_gp_, members);
static struct configfs_attribute *target_core_alua_tg_pt_gp_attrs[] = { static struct configfs_attribute *target_core_alua_tg_pt_gp_attrs[] = {
&target_core_alua_tg_pt_gp_alua_access_state.attr, &target_tg_pt_gp_attr_alua_access_state,
&target_core_alua_tg_pt_gp_alua_access_status.attr, &target_tg_pt_gp_attr_alua_access_status,
&target_core_alua_tg_pt_gp_alua_access_type.attr, &target_tg_pt_gp_attr_alua_access_type,
&target_core_alua_tg_pt_gp_alua_support_transitioning.attr, &target_tg_pt_gp_attr_alua_support_transitioning,
&target_core_alua_tg_pt_gp_alua_support_offline.attr, &target_tg_pt_gp_attr_alua_support_offline,
&target_core_alua_tg_pt_gp_alua_support_lba_dependent.attr, &target_tg_pt_gp_attr_alua_support_lba_dependent,
&target_core_alua_tg_pt_gp_alua_support_unavailable.attr, &target_tg_pt_gp_attr_alua_support_unavailable,
&target_core_alua_tg_pt_gp_alua_support_standby.attr, &target_tg_pt_gp_attr_alua_support_standby,
&target_core_alua_tg_pt_gp_alua_support_active_nonoptimized.attr, &target_tg_pt_gp_attr_alua_support_active_nonoptimized,
&target_core_alua_tg_pt_gp_alua_support_active_optimized.attr, &target_tg_pt_gp_attr_alua_support_active_optimized,
&target_core_alua_tg_pt_gp_alua_write_metadata.attr, &target_tg_pt_gp_attr_alua_write_metadata,
&target_core_alua_tg_pt_gp_nonop_delay_msecs.attr, &target_tg_pt_gp_attr_nonop_delay_msecs,
&target_core_alua_tg_pt_gp_trans_delay_msecs.attr, &target_tg_pt_gp_attr_trans_delay_msecs,
&target_core_alua_tg_pt_gp_implicit_trans_secs.attr, &target_tg_pt_gp_attr_implicit_trans_secs,
&target_core_alua_tg_pt_gp_preferred.attr, &target_tg_pt_gp_attr_preferred,
&target_core_alua_tg_pt_gp_tg_pt_gp_id.attr, &target_tg_pt_gp_attr_tg_pt_gp_id,
&target_core_alua_tg_pt_gp_members.attr, &target_tg_pt_gp_attr_members,
NULL, NULL,
}; };
...@@ -2978,8 +2665,6 @@ static void target_core_alua_tg_pt_gp_release(struct config_item *item) ...@@ -2978,8 +2665,6 @@ static void target_core_alua_tg_pt_gp_release(struct config_item *item)
static struct configfs_item_operations target_core_alua_tg_pt_gp_ops = { static struct configfs_item_operations target_core_alua_tg_pt_gp_ops = {
.release = target_core_alua_tg_pt_gp_release, .release = target_core_alua_tg_pt_gp_release,
.show_attribute = target_core_alua_tg_pt_gp_attr_show,
.store_attribute = target_core_alua_tg_pt_gp_attr_store,
}; };
static struct config_item_type target_core_alua_tg_pt_gp_cit = { static struct config_item_type target_core_alua_tg_pt_gp_cit = {
...@@ -3237,34 +2922,24 @@ static struct configfs_group_operations target_core_hba_group_ops = { ...@@ -3237,34 +2922,24 @@ static struct configfs_group_operations target_core_hba_group_ops = {
.drop_item = target_core_drop_subdev, .drop_item = target_core_drop_subdev,
}; };
CONFIGFS_EATTR_STRUCT(target_core_hba, se_hba);
#define SE_HBA_ATTR(_name, _mode) \
static struct target_core_hba_attribute \
target_core_hba_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
target_core_hba_show_attr_##_name, \
target_core_hba_store_attr_##_name);
#define SE_HBA_ATTR_RO(_name) \ static inline struct se_hba *to_hba(struct config_item *item)
static struct target_core_hba_attribute \ {
target_core_hba_##_name = \ return container_of(to_config_group(item), struct se_hba, hba_group);
__CONFIGFS_EATTR_RO(_name, \ }
target_core_hba_show_attr_##_name);
static ssize_t target_core_hba_show_attr_hba_info( static ssize_t target_hba_info_show(struct config_item *item, char *page)
struct se_hba *hba,
char *page)
{ {
struct se_hba *hba = to_hba(item);
return sprintf(page, "HBA Index: %d plugin: %s version: %s\n", return sprintf(page, "HBA Index: %d plugin: %s version: %s\n",
hba->hba_id, hba->backend->ops->name, hba->hba_id, hba->backend->ops->name,
TARGET_CORE_VERSION); TARGET_CORE_VERSION);
} }
SE_HBA_ATTR_RO(hba_info); static ssize_t target_hba_mode_show(struct config_item *item, char *page)
static ssize_t target_core_hba_show_attr_hba_mode(struct se_hba *hba,
char *page)
{ {
struct se_hba *hba = to_hba(item);
int hba_mode = 0; int hba_mode = 0;
if (hba->hba_flags & HBA_FLAGS_PSCSI_MODE) if (hba->hba_flags & HBA_FLAGS_PSCSI_MODE)
...@@ -3273,9 +2948,10 @@ static ssize_t target_core_hba_show_attr_hba_mode(struct se_hba *hba, ...@@ -3273,9 +2948,10 @@ static ssize_t target_core_hba_show_attr_hba_mode(struct se_hba *hba,
return sprintf(page, "%d\n", hba_mode); return sprintf(page, "%d\n", hba_mode);
} }
static ssize_t target_core_hba_store_attr_hba_mode(struct se_hba *hba, static ssize_t target_hba_mode_store(struct config_item *item,
const char *page, size_t count) const char *page, size_t count)
{ {
struct se_hba *hba = to_hba(item);
unsigned long mode_flag; unsigned long mode_flag;
int ret; int ret;
...@@ -3304,9 +2980,8 @@ static ssize_t target_core_hba_store_attr_hba_mode(struct se_hba *hba, ...@@ -3304,9 +2980,8 @@ static ssize_t target_core_hba_store_attr_hba_mode(struct se_hba *hba,
return count; return count;
} }
SE_HBA_ATTR(hba_mode, S_IRUGO | S_IWUSR); CONFIGFS_ATTR_RO(target_, hba_info);
CONFIGFS_ATTR(target_, hba_mode);
CONFIGFS_EATTR_OPS(target_core_hba, se_hba, hba_group);
static void target_core_hba_release(struct config_item *item) static void target_core_hba_release(struct config_item *item)
{ {
...@@ -3316,15 +2991,13 @@ static void target_core_hba_release(struct config_item *item) ...@@ -3316,15 +2991,13 @@ static void target_core_hba_release(struct config_item *item)
} }
static struct configfs_attribute *target_core_hba_attrs[] = { static struct configfs_attribute *target_core_hba_attrs[] = {
&target_core_hba_hba_info.attr, &target_attr_hba_info,
&target_core_hba_hba_mode.attr, &target_attr_hba_mode,
NULL, NULL,
}; };
static struct configfs_item_operations target_core_hba_item_ops = { static struct configfs_item_operations target_core_hba_item_ops = {
.release = target_core_hba_release, .release = target_core_hba_release,
.show_attribute = target_core_hba_attr_show,
.store_attribute = target_core_hba_attr_store,
}; };
static struct config_item_type target_core_hba_cit = { static struct config_item_type target_core_hba_cit = {
......
...@@ -35,8 +35,6 @@ ...@@ -35,8 +35,6 @@
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/target_core_fabric_configfs.h>
#include <target/configfs_macros.h>
#include "target_core_internal.h" #include "target_core_internal.h"
#include "target_core_alua.h" #include "target_core_alua.h"
...@@ -152,17 +150,16 @@ static int target_fabric_mappedlun_unlink( ...@@ -152,17 +150,16 @@ static int target_fabric_mappedlun_unlink(
return core_dev_del_initiator_node_lun_acl(lun, lacl); return core_dev_del_initiator_node_lun_acl(lun, lacl);
} }
CONFIGFS_EATTR_STRUCT(target_fabric_mappedlun, se_lun_acl); static struct se_lun_acl *item_to_lun_acl(struct config_item *item)
#define TCM_MAPPEDLUN_ATTR(_name, _mode) \ {
static struct target_fabric_mappedlun_attribute target_fabric_mappedlun_##_name = \ return container_of(to_config_group(item), struct se_lun_acl,
__CONFIGFS_EATTR(_name, _mode, \ se_lun_group);
target_fabric_mappedlun_show_##_name, \ }
target_fabric_mappedlun_store_##_name);
static ssize_t target_fabric_mappedlun_show_write_protect( static ssize_t target_fabric_mappedlun_write_protect_show(
struct se_lun_acl *lacl, struct config_item *item, char *page)
char *page)
{ {
struct se_lun_acl *lacl = item_to_lun_acl(item);
struct se_node_acl *se_nacl = lacl->se_lun_nacl; struct se_node_acl *se_nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t len = 0; ssize_t len = 0;
...@@ -178,11 +175,10 @@ static ssize_t target_fabric_mappedlun_show_write_protect( ...@@ -178,11 +175,10 @@ static ssize_t target_fabric_mappedlun_show_write_protect(
return len; return len;
} }
static ssize_t target_fabric_mappedlun_store_write_protect( static ssize_t target_fabric_mappedlun_write_protect_store(
struct se_lun_acl *lacl, struct config_item *item, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_lun_acl *lacl = item_to_lun_acl(item);
struct se_node_acl *se_nacl = lacl->se_lun_nacl; struct se_node_acl *se_nacl = lacl->se_lun_nacl;
struct se_portal_group *se_tpg = se_nacl->se_tpg; struct se_portal_group *se_tpg = se_nacl->se_tpg;
unsigned long op; unsigned long op;
...@@ -209,9 +205,12 @@ static ssize_t target_fabric_mappedlun_store_write_protect( ...@@ -209,9 +205,12 @@ static ssize_t target_fabric_mappedlun_store_write_protect(
} }
TCM_MAPPEDLUN_ATTR(write_protect, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(target_fabric_mappedlun_, write_protect);
CONFIGFS_EATTR_OPS(target_fabric_mappedlun, se_lun_acl, se_lun_group); static struct configfs_attribute *target_fabric_mappedlun_attrs[] = {
&target_fabric_mappedlun_attr_write_protect,
NULL,
};
static void target_fabric_mappedlun_release(struct config_item *item) static void target_fabric_mappedlun_release(struct config_item *item)
{ {
...@@ -222,15 +221,8 @@ static void target_fabric_mappedlun_release(struct config_item *item) ...@@ -222,15 +221,8 @@ static void target_fabric_mappedlun_release(struct config_item *item)
core_dev_free_initiator_node_lun_acl(se_tpg, lacl); core_dev_free_initiator_node_lun_acl(se_tpg, lacl);
} }
static struct configfs_attribute *target_fabric_mappedlun_attrs[] = {
&target_fabric_mappedlun_write_protect.attr,
NULL,
};
static struct configfs_item_operations target_fabric_mappedlun_item_ops = { static struct configfs_item_operations target_fabric_mappedlun_item_ops = {
.release = target_fabric_mappedlun_release, .release = target_fabric_mappedlun_release,
.show_attribute = target_fabric_mappedlun_attr_show,
.store_attribute = target_fabric_mappedlun_attr_store,
.allow_link = target_fabric_mappedlun_link, .allow_link = target_fabric_mappedlun_link,
.drop_link = target_fabric_mappedlun_unlink, .drop_link = target_fabric_mappedlun_unlink,
}; };
...@@ -266,49 +258,12 @@ TF_CIT_SETUP(tpg_mappedlun_stat, NULL, &target_fabric_mappedlun_stat_group_ops, ...@@ -266,49 +258,12 @@ TF_CIT_SETUP(tpg_mappedlun_stat, NULL, &target_fabric_mappedlun_stat_group_ops,
/* End of tfc_tpg_mappedlun_port_cit */ /* End of tfc_tpg_mappedlun_port_cit */
/* Start of tfc_tpg_nacl_attrib_cit */ TF_CIT_SETUP_DRV(tpg_nacl_attrib, NULL, NULL);
TF_CIT_SETUP_DRV(tpg_nacl_auth, NULL, NULL);
CONFIGFS_EATTR_OPS(target_fabric_nacl_attrib, se_node_acl, acl_attrib_group); TF_CIT_SETUP_DRV(tpg_nacl_param, NULL, NULL);
static struct configfs_item_operations target_fabric_nacl_attrib_item_ops = {
.show_attribute = target_fabric_nacl_attrib_attr_show,
.store_attribute = target_fabric_nacl_attrib_attr_store,
};
TF_CIT_SETUP_DRV(tpg_nacl_attrib, &target_fabric_nacl_attrib_item_ops, NULL);
/* End of tfc_tpg_nacl_attrib_cit */
/* Start of tfc_tpg_nacl_auth_cit */
CONFIGFS_EATTR_OPS(target_fabric_nacl_auth, se_node_acl, acl_auth_group);
static struct configfs_item_operations target_fabric_nacl_auth_item_ops = {
.show_attribute = target_fabric_nacl_auth_attr_show,
.store_attribute = target_fabric_nacl_auth_attr_store,
};
TF_CIT_SETUP_DRV(tpg_nacl_auth, &target_fabric_nacl_auth_item_ops, NULL);
/* End of tfc_tpg_nacl_auth_cit */
/* Start of tfc_tpg_nacl_param_cit */
CONFIGFS_EATTR_OPS(target_fabric_nacl_param, se_node_acl, acl_param_group);
static struct configfs_item_operations target_fabric_nacl_param_item_ops = {
.show_attribute = target_fabric_nacl_param_attr_show,
.store_attribute = target_fabric_nacl_param_attr_store,
};
TF_CIT_SETUP_DRV(tpg_nacl_param, &target_fabric_nacl_param_item_ops, NULL);
/* End of tfc_tpg_nacl_param_cit */
/* Start of tfc_tpg_nacl_base_cit */ /* Start of tfc_tpg_nacl_base_cit */
CONFIGFS_EATTR_OPS(target_fabric_nacl_base, se_node_acl, acl_group);
static struct config_group *target_fabric_make_mappedlun( static struct config_group *target_fabric_make_mappedlun(
struct config_group *group, struct config_group *group,
const char *name) const char *name)
...@@ -438,8 +393,6 @@ static void target_fabric_nacl_base_release(struct config_item *item) ...@@ -438,8 +393,6 @@ static void target_fabric_nacl_base_release(struct config_item *item)
static struct configfs_item_operations target_fabric_nacl_base_item_ops = { static struct configfs_item_operations target_fabric_nacl_base_item_ops = {
.release = target_fabric_nacl_base_release, .release = target_fabric_nacl_base_release,
.show_attribute = target_fabric_nacl_base_attr_show,
.store_attribute = target_fabric_nacl_base_attr_store,
}; };
static struct configfs_group_operations target_fabric_nacl_base_group_ops = { static struct configfs_group_operations target_fabric_nacl_base_group_ops = {
...@@ -540,8 +493,6 @@ TF_CIT_SETUP(tpg_nacl, NULL, &target_fabric_nacl_group_ops, NULL); ...@@ -540,8 +493,6 @@ TF_CIT_SETUP(tpg_nacl, NULL, &target_fabric_nacl_group_ops, NULL);
/* Start of tfc_tpg_np_base_cit */ /* Start of tfc_tpg_np_base_cit */
CONFIGFS_EATTR_OPS(target_fabric_np_base, se_tpg_np, tpg_np_group);
static void target_fabric_np_base_release(struct config_item *item) static void target_fabric_np_base_release(struct config_item *item)
{ {
struct se_tpg_np *se_tpg_np = container_of(to_config_group(item), struct se_tpg_np *se_tpg_np = container_of(to_config_group(item),
...@@ -554,8 +505,6 @@ static void target_fabric_np_base_release(struct config_item *item) ...@@ -554,8 +505,6 @@ static void target_fabric_np_base_release(struct config_item *item)
static struct configfs_item_operations target_fabric_np_base_item_ops = { static struct configfs_item_operations target_fabric_np_base_item_ops = {
.release = target_fabric_np_base_release, .release = target_fabric_np_base_release,
.show_attribute = target_fabric_np_base_attr_show,
.store_attribute = target_fabric_np_base_attr_store,
}; };
TF_CIT_SETUP_DRV(tpg_np_base, &target_fabric_np_base_item_ops, NULL); TF_CIT_SETUP_DRV(tpg_np_base, &target_fabric_np_base_item_ops, NULL);
...@@ -610,132 +559,113 @@ TF_CIT_SETUP(tpg_np, NULL, &target_fabric_np_group_ops, NULL); ...@@ -610,132 +559,113 @@ TF_CIT_SETUP(tpg_np, NULL, &target_fabric_np_group_ops, NULL);
/* Start of tfc_tpg_port_cit */ /* Start of tfc_tpg_port_cit */
CONFIGFS_EATTR_STRUCT(target_fabric_port, se_lun); static struct se_lun *item_to_lun(struct config_item *item)
#define TCM_PORT_ATTR(_name, _mode) \ {
static struct target_fabric_port_attribute target_fabric_port_##_name = \ return container_of(to_config_group(item), struct se_lun,
__CONFIGFS_EATTR(_name, _mode, \ lun_group);
target_fabric_port_show_attr_##_name, \ }
target_fabric_port_store_attr_##_name);
#define TCM_PORT_ATTOR_RO(_name) \
__CONFIGFS_EATTR_RO(_name, \
target_fabric_port_show_attr_##_name);
/* static ssize_t target_fabric_port_alua_tg_pt_gp_show(struct config_item *item,
* alua_tg_pt_gp char *page)
*/
static ssize_t target_fabric_port_show_attr_alua_tg_pt_gp(
struct se_lun *lun,
char *page)
{ {
struct se_lun *lun = item_to_lun(item);
if (!lun || !lun->lun_se_dev) if (!lun || !lun->lun_se_dev)
return -ENODEV; return -ENODEV;
return core_alua_show_tg_pt_gp_info(lun, page); return core_alua_show_tg_pt_gp_info(lun, page);
} }
static ssize_t target_fabric_port_store_attr_alua_tg_pt_gp( static ssize_t target_fabric_port_alua_tg_pt_gp_store(struct config_item *item,
struct se_lun *lun, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_lun *lun = item_to_lun(item);
if (!lun || !lun->lun_se_dev) if (!lun || !lun->lun_se_dev)
return -ENODEV; return -ENODEV;
return core_alua_store_tg_pt_gp_info(lun, page, count); return core_alua_store_tg_pt_gp_info(lun, page, count);
} }
TCM_PORT_ATTR(alua_tg_pt_gp, S_IRUGO | S_IWUSR); static ssize_t target_fabric_port_alua_tg_pt_offline_show(
struct config_item *item, char *page)
/*
* alua_tg_pt_offline
*/
static ssize_t target_fabric_port_show_attr_alua_tg_pt_offline(
struct se_lun *lun,
char *page)
{ {
struct se_lun *lun = item_to_lun(item);
if (!lun || !lun->lun_se_dev) if (!lun || !lun->lun_se_dev)
return -ENODEV; return -ENODEV;
return core_alua_show_offline_bit(lun, page); return core_alua_show_offline_bit(lun, page);
} }
static ssize_t target_fabric_port_store_attr_alua_tg_pt_offline( static ssize_t target_fabric_port_alua_tg_pt_offline_store(
struct se_lun *lun, struct config_item *item, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_lun *lun = item_to_lun(item);
if (!lun || !lun->lun_se_dev) if (!lun || !lun->lun_se_dev)
return -ENODEV; return -ENODEV;
return core_alua_store_offline_bit(lun, page, count); return core_alua_store_offline_bit(lun, page, count);
} }
TCM_PORT_ATTR(alua_tg_pt_offline, S_IRUGO | S_IWUSR); static ssize_t target_fabric_port_alua_tg_pt_status_show(
struct config_item *item, char *page)
/*
* alua_tg_pt_status
*/
static ssize_t target_fabric_port_show_attr_alua_tg_pt_status(
struct se_lun *lun,
char *page)
{ {
struct se_lun *lun = item_to_lun(item);
if (!lun || !lun->lun_se_dev) if (!lun || !lun->lun_se_dev)
return -ENODEV; return -ENODEV;
return core_alua_show_secondary_status(lun, page); return core_alua_show_secondary_status(lun, page);
} }
static ssize_t target_fabric_port_store_attr_alua_tg_pt_status( static ssize_t target_fabric_port_alua_tg_pt_status_store(
struct se_lun *lun, struct config_item *item, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_lun *lun = item_to_lun(item);
if (!lun || !lun->lun_se_dev) if (!lun || !lun->lun_se_dev)
return -ENODEV; return -ENODEV;
return core_alua_store_secondary_status(lun, page, count); return core_alua_store_secondary_status(lun, page, count);
} }
TCM_PORT_ATTR(alua_tg_pt_status, S_IRUGO | S_IWUSR); static ssize_t target_fabric_port_alua_tg_pt_write_md_show(
struct config_item *item, char *page)
/*
* alua_tg_pt_write_md
*/
static ssize_t target_fabric_port_show_attr_alua_tg_pt_write_md(
struct se_lun *lun,
char *page)
{ {
struct se_lun *lun = item_to_lun(item);
if (!lun || !lun->lun_se_dev) if (!lun || !lun->lun_se_dev)
return -ENODEV; return -ENODEV;
return core_alua_show_secondary_write_metadata(lun, page); return core_alua_show_secondary_write_metadata(lun, page);
} }
static ssize_t target_fabric_port_store_attr_alua_tg_pt_write_md( static ssize_t target_fabric_port_alua_tg_pt_write_md_store(
struct se_lun *lun, struct config_item *item, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_lun *lun = item_to_lun(item);
if (!lun || !lun->lun_se_dev) if (!lun || !lun->lun_se_dev)
return -ENODEV; return -ENODEV;
return core_alua_store_secondary_write_metadata(lun, page, count); return core_alua_store_secondary_write_metadata(lun, page, count);
} }
TCM_PORT_ATTR(alua_tg_pt_write_md, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_gp);
CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_offline);
CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_status);
CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_write_md);
static struct configfs_attribute *target_fabric_port_attrs[] = { static struct configfs_attribute *target_fabric_port_attrs[] = {
&target_fabric_port_alua_tg_pt_gp.attr, &target_fabric_port_attr_alua_tg_pt_gp,
&target_fabric_port_alua_tg_pt_offline.attr, &target_fabric_port_attr_alua_tg_pt_offline,
&target_fabric_port_alua_tg_pt_status.attr, &target_fabric_port_attr_alua_tg_pt_status,
&target_fabric_port_alua_tg_pt_write_md.attr, &target_fabric_port_attr_alua_tg_pt_write_md,
NULL, NULL,
}; };
CONFIGFS_EATTR_OPS(target_fabric_port, se_lun, lun_group);
static int target_fabric_port_link( static int target_fabric_port_link(
struct config_item *lun_ci, struct config_item *lun_ci,
struct config_item *se_dev_ci) struct config_item *se_dev_ci)
...@@ -821,8 +751,6 @@ static void target_fabric_port_release(struct config_item *item) ...@@ -821,8 +751,6 @@ static void target_fabric_port_release(struct config_item *item)
} }
static struct configfs_item_operations target_fabric_port_item_ops = { static struct configfs_item_operations target_fabric_port_item_ops = {
.show_attribute = target_fabric_port_attr_show,
.store_attribute = target_fabric_port_attr_store,
.release = target_fabric_port_release, .release = target_fabric_port_release,
.allow_link = target_fabric_port_link, .allow_link = target_fabric_port_link,
.drop_link = target_fabric_port_unlink, .drop_link = target_fabric_port_unlink,
...@@ -952,50 +880,11 @@ TF_CIT_SETUP(tpg_lun, NULL, &target_fabric_lun_group_ops, NULL); ...@@ -952,50 +880,11 @@ TF_CIT_SETUP(tpg_lun, NULL, &target_fabric_lun_group_ops, NULL);
/* End of tfc_tpg_lun_cit */ /* End of tfc_tpg_lun_cit */
/* Start of tfc_tpg_attrib_cit */ TF_CIT_SETUP_DRV(tpg_attrib, NULL, NULL);
TF_CIT_SETUP_DRV(tpg_auth, NULL, NULL);
CONFIGFS_EATTR_OPS(target_fabric_tpg_attrib, se_portal_group, tpg_attrib_group); TF_CIT_SETUP_DRV(tpg_param, NULL, NULL);
static struct configfs_item_operations target_fabric_tpg_attrib_item_ops = {
.show_attribute = target_fabric_tpg_attrib_attr_show,
.store_attribute = target_fabric_tpg_attrib_attr_store,
};
TF_CIT_SETUP_DRV(tpg_attrib, &target_fabric_tpg_attrib_item_ops, NULL);
/* End of tfc_tpg_attrib_cit */
/* Start of tfc_tpg_auth_cit */
CONFIGFS_EATTR_OPS(target_fabric_tpg_auth, se_portal_group, tpg_auth_group);
static struct configfs_item_operations target_fabric_tpg_auth_item_ops = {
.show_attribute = target_fabric_tpg_auth_attr_show,
.store_attribute = target_fabric_tpg_auth_attr_store,
};
TF_CIT_SETUP_DRV(tpg_auth, &target_fabric_tpg_auth_item_ops, NULL);
/* End of tfc_tpg_attrib_cit */
/* Start of tfc_tpg_param_cit */
CONFIGFS_EATTR_OPS(target_fabric_tpg_param, se_portal_group, tpg_param_group);
static struct configfs_item_operations target_fabric_tpg_param_item_ops = {
.show_attribute = target_fabric_tpg_param_attr_show,
.store_attribute = target_fabric_tpg_param_attr_store,
};
TF_CIT_SETUP_DRV(tpg_param, &target_fabric_tpg_param_item_ops, NULL);
/* End of tfc_tpg_param_cit */
/* Start of tfc_tpg_base_cit */ /* Start of tfc_tpg_base_cit */
/*
* For use with TF_TPG_ATTR() and TF_TPG_ATTR_RO()
*/
CONFIGFS_EATTR_OPS(target_fabric_tpg, se_portal_group, tpg_group);
static void target_fabric_tpg_release(struct config_item *item) static void target_fabric_tpg_release(struct config_item *item)
{ {
...@@ -1009,8 +898,6 @@ static void target_fabric_tpg_release(struct config_item *item) ...@@ -1009,8 +898,6 @@ static void target_fabric_tpg_release(struct config_item *item)
static struct configfs_item_operations target_fabric_tpg_base_item_ops = { static struct configfs_item_operations target_fabric_tpg_base_item_ops = {
.release = target_fabric_tpg_release, .release = target_fabric_tpg_release,
.show_attribute = target_fabric_tpg_attr_show,
.store_attribute = target_fabric_tpg_attr_store,
}; };
TF_CIT_SETUP_DRV(tpg_base, &target_fabric_tpg_base_item_ops, NULL); TF_CIT_SETUP_DRV(tpg_base, &target_fabric_tpg_base_item_ops, NULL);
...@@ -1176,33 +1063,9 @@ static struct configfs_group_operations target_fabric_wwn_group_ops = { ...@@ -1176,33 +1063,9 @@ static struct configfs_group_operations target_fabric_wwn_group_ops = {
.make_group = target_fabric_make_wwn, .make_group = target_fabric_make_wwn,
.drop_item = target_fabric_drop_wwn, .drop_item = target_fabric_drop_wwn,
}; };
/*
* For use with TF_WWN_ATTR() and TF_WWN_ATTR_RO()
*/
CONFIGFS_EATTR_OPS(target_fabric_wwn, target_fabric_configfs, tf_group);
static struct configfs_item_operations target_fabric_wwn_item_ops = {
.show_attribute = target_fabric_wwn_attr_show,
.store_attribute = target_fabric_wwn_attr_store,
};
TF_CIT_SETUP_DRV(wwn, &target_fabric_wwn_item_ops, &target_fabric_wwn_group_ops);
/* End of tfc_wwn_cit */
/* Start of tfc_discovery_cit */
CONFIGFS_EATTR_OPS(target_fabric_discovery, target_fabric_configfs,
tf_disc_group);
static struct configfs_item_operations target_fabric_discovery_item_ops = {
.show_attribute = target_fabric_discovery_attr_show,
.store_attribute = target_fabric_discovery_attr_store,
};
TF_CIT_SETUP_DRV(discovery, &target_fabric_discovery_item_ops, NULL);
/* End of tfc_discovery_cit */ TF_CIT_SETUP_DRV(wwn, NULL, &target_fabric_wwn_group_ops);
TF_CIT_SETUP_DRV(discovery, NULL, NULL);
int target_fabric_setup_cits(struct target_fabric_configfs *tf) int target_fabric_setup_cits(struct target_fabric_configfs *tf)
{ {
......
...@@ -87,6 +87,9 @@ void target_free_device(struct se_device *); ...@@ -87,6 +87,9 @@ void target_free_device(struct se_device *);
/* target_core_configfs.c */ /* target_core_configfs.c */
void target_setup_backend_cits(struct target_backend *); void target_setup_backend_cits(struct target_backend *);
/* target_core_fabric_configfs.c */
int target_fabric_setup_cits(struct target_fabric_configfs *);
/* target_core_fabric_lib.c */ /* target_core_fabric_lib.c */
int target_get_pr_transport_id_len(struct se_node_acl *nacl, int target_get_pr_transport_id_len(struct se_node_acl *nacl,
struct t10_pr_registration *pr_reg, int *format_code); struct t10_pr_registration *pr_reg, int *format_code);
......
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_backend.h> #include <target/target_core_backend.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/configfs_macros.h>
#include "target_core_internal.h" #include "target_core_internal.h"
...@@ -55,75 +54,49 @@ ...@@ -55,75 +54,49 @@
* SCSI Device Table * SCSI Device Table
*/ */
CONFIGFS_EATTR_STRUCT(target_stat_scsi_dev, se_dev_stat_grps); static struct se_device *to_stat_dev(struct config_item *item)
#define DEV_STAT_SCSI_DEV_ATTR(_name, _mode) \ {
static struct target_stat_scsi_dev_attribute \ struct se_dev_stat_grps *sgrps = container_of(to_config_group(item),
target_stat_scsi_dev_##_name = \ struct se_dev_stat_grps, scsi_dev_group);
__CONFIGFS_EATTR(_name, _mode, \ return container_of(sgrps, struct se_device, dev_stat_grps);
target_stat_scsi_dev_show_attr_##_name, \ }
target_stat_scsi_dev_store_attr_##_name);
#define DEV_STAT_SCSI_DEV_ATTR_RO(_name) \
static struct target_stat_scsi_dev_attribute \
target_stat_scsi_dev_##_name = \
__CONFIGFS_EATTR_RO(_name, \
target_stat_scsi_dev_show_attr_##_name);
static ssize_t target_stat_scsi_dev_show_attr_inst( static ssize_t target_stat_inst_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = struct se_hba *hba = to_stat_dev(item)->se_hba;
container_of(sgrps, struct se_device, dev_stat_grps);
struct se_hba *hba = dev->se_hba;
return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index); return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index);
} }
DEV_STAT_SCSI_DEV_ATTR_RO(inst);
static ssize_t target_stat_scsi_dev_show_attr_indx( static ssize_t target_stat_indx_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = return snprintf(page, PAGE_SIZE, "%u\n", to_stat_dev(item)->dev_index);
container_of(sgrps, struct se_device, dev_stat_grps);
return snprintf(page, PAGE_SIZE, "%u\n", dev->dev_index);
} }
DEV_STAT_SCSI_DEV_ATTR_RO(indx);
static ssize_t target_stat_scsi_dev_show_attr_role( static ssize_t target_stat_role_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
return snprintf(page, PAGE_SIZE, "Target\n"); return snprintf(page, PAGE_SIZE, "Target\n");
} }
DEV_STAT_SCSI_DEV_ATTR_RO(role);
static ssize_t target_stat_scsi_dev_show_attr_ports( static ssize_t target_stat_ports_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = return snprintf(page, PAGE_SIZE, "%u\n", to_stat_dev(item)->export_count);
container_of(sgrps, struct se_device, dev_stat_grps);
return snprintf(page, PAGE_SIZE, "%u\n", dev->export_count);
} }
DEV_STAT_SCSI_DEV_ATTR_RO(ports);
CONFIGFS_EATTR_OPS(target_stat_scsi_dev, se_dev_stat_grps, scsi_dev_group); CONFIGFS_ATTR_RO(target_stat_, inst);
CONFIGFS_ATTR_RO(target_stat_, indx);
CONFIGFS_ATTR_RO(target_stat_, role);
CONFIGFS_ATTR_RO(target_stat_, ports);
static struct configfs_attribute *target_stat_scsi_dev_attrs[] = { static struct configfs_attribute *target_stat_scsi_dev_attrs[] = {
&target_stat_scsi_dev_inst.attr, &target_stat_attr_inst,
&target_stat_scsi_dev_indx.attr, &target_stat_attr_indx,
&target_stat_scsi_dev_role.attr, &target_stat_attr_role,
&target_stat_scsi_dev_ports.attr, &target_stat_attr_ports,
NULL, NULL,
}; };
static struct configfs_item_operations target_stat_scsi_dev_attrib_ops = {
.show_attribute = target_stat_scsi_dev_attr_show,
.store_attribute = target_stat_scsi_dev_attr_store,
};
static struct config_item_type target_stat_scsi_dev_cit = { static struct config_item_type target_stat_scsi_dev_cit = {
.ct_item_ops = &target_stat_scsi_dev_attrib_ops,
.ct_attrs = target_stat_scsi_dev_attrs, .ct_attrs = target_stat_scsi_dev_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -131,109 +104,78 @@ static struct config_item_type target_stat_scsi_dev_cit = { ...@@ -131,109 +104,78 @@ static struct config_item_type target_stat_scsi_dev_cit = {
/* /*
* SCSI Target Device Table * SCSI Target Device Table
*/ */
static struct se_device *to_stat_tgt_dev(struct config_item *item)
{
struct se_dev_stat_grps *sgrps = container_of(to_config_group(item),
struct se_dev_stat_grps, scsi_tgt_dev_group);
return container_of(sgrps, struct se_device, dev_stat_grps);
}
CONFIGFS_EATTR_STRUCT(target_stat_scsi_tgt_dev, se_dev_stat_grps); static ssize_t target_stat_tgt_inst_show(struct config_item *item, char *page)
#define DEV_STAT_SCSI_TGT_DEV_ATTR(_name, _mode) \
static struct target_stat_scsi_tgt_dev_attribute \
target_stat_scsi_tgt_dev_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
target_stat_scsi_tgt_dev_show_attr_##_name, \
target_stat_scsi_tgt_dev_store_attr_##_name);
#define DEV_STAT_SCSI_TGT_DEV_ATTR_RO(_name) \
static struct target_stat_scsi_tgt_dev_attribute \
target_stat_scsi_tgt_dev_##_name = \
__CONFIGFS_EATTR_RO(_name, \
target_stat_scsi_tgt_dev_show_attr_##_name);
static ssize_t target_stat_scsi_tgt_dev_show_attr_inst(
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = struct se_hba *hba = to_stat_tgt_dev(item)->se_hba;
container_of(sgrps, struct se_device, dev_stat_grps);
struct se_hba *hba = dev->se_hba;
return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index); return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index);
} }
DEV_STAT_SCSI_TGT_DEV_ATTR_RO(inst);
static ssize_t target_stat_scsi_tgt_dev_show_attr_indx( static ssize_t target_stat_tgt_indx_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = return snprintf(page, PAGE_SIZE, "%u\n", to_stat_tgt_dev(item)->dev_index);
container_of(sgrps, struct se_device, dev_stat_grps);
return snprintf(page, PAGE_SIZE, "%u\n", dev->dev_index);
} }
DEV_STAT_SCSI_TGT_DEV_ATTR_RO(indx);
static ssize_t target_stat_scsi_tgt_dev_show_attr_num_lus( static ssize_t target_stat_tgt_num_lus_show(struct config_item *item,
struct se_dev_stat_grps *sgrps, char *page) char *page)
{ {
return snprintf(page, PAGE_SIZE, "%u\n", LU_COUNT); return snprintf(page, PAGE_SIZE, "%u\n", LU_COUNT);
} }
DEV_STAT_SCSI_TGT_DEV_ATTR_RO(num_lus);
static ssize_t target_stat_scsi_tgt_dev_show_attr_status( static ssize_t target_stat_tgt_status_show(struct config_item *item,
struct se_dev_stat_grps *sgrps, char *page) char *page)
{ {
struct se_device *dev = if (to_stat_tgt_dev(item)->export_count)
container_of(sgrps, struct se_device, dev_stat_grps);
if (dev->export_count)
return snprintf(page, PAGE_SIZE, "activated"); return snprintf(page, PAGE_SIZE, "activated");
else else
return snprintf(page, PAGE_SIZE, "deactivated"); return snprintf(page, PAGE_SIZE, "deactivated");
} }
DEV_STAT_SCSI_TGT_DEV_ATTR_RO(status);
static ssize_t target_stat_scsi_tgt_dev_show_attr_non_access_lus( static ssize_t target_stat_tgt_non_access_lus_show(struct config_item *item,
struct se_dev_stat_grps *sgrps, char *page) char *page)
{ {
struct se_device *dev =
container_of(sgrps, struct se_device, dev_stat_grps);
int non_accessible_lus; int non_accessible_lus;
if (dev->export_count) if (to_stat_tgt_dev(item)->export_count)
non_accessible_lus = 0; non_accessible_lus = 0;
else else
non_accessible_lus = 1; non_accessible_lus = 1;
return snprintf(page, PAGE_SIZE, "%u\n", non_accessible_lus); return snprintf(page, PAGE_SIZE, "%u\n", non_accessible_lus);
} }
DEV_STAT_SCSI_TGT_DEV_ATTR_RO(non_access_lus);
static ssize_t target_stat_scsi_tgt_dev_show_attr_resets( static ssize_t target_stat_tgt_resets_show(struct config_item *item,
struct se_dev_stat_grps *sgrps, char *page) char *page)
{ {
struct se_device *dev =
container_of(sgrps, struct se_device, dev_stat_grps);
return snprintf(page, PAGE_SIZE, "%lu\n", return snprintf(page, PAGE_SIZE, "%lu\n",
atomic_long_read(&dev->num_resets)); atomic_long_read(&to_stat_tgt_dev(item)->num_resets));
} }
DEV_STAT_SCSI_TGT_DEV_ATTR_RO(resets);
CONFIGFS_ATTR_RO(target_stat_tgt_, inst);
CONFIGFS_EATTR_OPS(target_stat_scsi_tgt_dev, se_dev_stat_grps, scsi_tgt_dev_group); CONFIGFS_ATTR_RO(target_stat_tgt_, indx);
CONFIGFS_ATTR_RO(target_stat_tgt_, num_lus);
CONFIGFS_ATTR_RO(target_stat_tgt_, status);
CONFIGFS_ATTR_RO(target_stat_tgt_, non_access_lus);
CONFIGFS_ATTR_RO(target_stat_tgt_, resets);
static struct configfs_attribute *target_stat_scsi_tgt_dev_attrs[] = { static struct configfs_attribute *target_stat_scsi_tgt_dev_attrs[] = {
&target_stat_scsi_tgt_dev_inst.attr, &target_stat_tgt_attr_inst,
&target_stat_scsi_tgt_dev_indx.attr, &target_stat_tgt_attr_indx,
&target_stat_scsi_tgt_dev_num_lus.attr, &target_stat_tgt_attr_num_lus,
&target_stat_scsi_tgt_dev_status.attr, &target_stat_tgt_attr_status,
&target_stat_scsi_tgt_dev_non_access_lus.attr, &target_stat_tgt_attr_non_access_lus,
&target_stat_scsi_tgt_dev_resets.attr, &target_stat_tgt_attr_resets,
NULL, NULL,
}; };
static struct configfs_item_operations target_stat_scsi_tgt_dev_attrib_ops = {
.show_attribute = target_stat_scsi_tgt_dev_attr_show,
.store_attribute = target_stat_scsi_tgt_dev_attr_store,
};
static struct config_item_type target_stat_scsi_tgt_dev_cit = { static struct config_item_type target_stat_scsi_tgt_dev_cit = {
.ct_item_ops = &target_stat_scsi_tgt_dev_attrib_ops,
.ct_attrs = target_stat_scsi_tgt_dev_attrs, .ct_attrs = target_stat_scsi_tgt_dev_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -242,72 +184,50 @@ static struct config_item_type target_stat_scsi_tgt_dev_cit = { ...@@ -242,72 +184,50 @@ static struct config_item_type target_stat_scsi_tgt_dev_cit = {
* SCSI Logical Unit Table * SCSI Logical Unit Table
*/ */
CONFIGFS_EATTR_STRUCT(target_stat_scsi_lu, se_dev_stat_grps); static struct se_device *to_stat_lu_dev(struct config_item *item)
#define DEV_STAT_SCSI_LU_ATTR(_name, _mode) \ {
static struct target_stat_scsi_lu_attribute target_stat_scsi_lu_##_name = \ struct se_dev_stat_grps *sgrps = container_of(to_config_group(item),
__CONFIGFS_EATTR(_name, _mode, \ struct se_dev_stat_grps, scsi_lu_group);
target_stat_scsi_lu_show_attr_##_name, \ return container_of(sgrps, struct se_device, dev_stat_grps);
target_stat_scsi_lu_store_attr_##_name); }
#define DEV_STAT_SCSI_LU_ATTR_RO(_name) \
static struct target_stat_scsi_lu_attribute target_stat_scsi_lu_##_name = \
__CONFIGFS_EATTR_RO(_name, \
target_stat_scsi_lu_show_attr_##_name);
static ssize_t target_stat_scsi_lu_show_attr_inst( static ssize_t target_stat_lu_inst_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = struct se_hba *hba = to_stat_lu_dev(item)->se_hba;
container_of(sgrps, struct se_device, dev_stat_grps);
struct se_hba *hba = dev->se_hba;
return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index); return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index);
} }
DEV_STAT_SCSI_LU_ATTR_RO(inst);
static ssize_t target_stat_scsi_lu_show_attr_dev( static ssize_t target_stat_lu_dev_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = return snprintf(page, PAGE_SIZE, "%u\n",
container_of(sgrps, struct se_device, dev_stat_grps); to_stat_lu_dev(item)->dev_index);
return snprintf(page, PAGE_SIZE, "%u\n", dev->dev_index);
} }
DEV_STAT_SCSI_LU_ATTR_RO(dev);
static ssize_t target_stat_scsi_lu_show_attr_indx( static ssize_t target_stat_lu_indx_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
return snprintf(page, PAGE_SIZE, "%u\n", SCSI_LU_INDEX); return snprintf(page, PAGE_SIZE, "%u\n", SCSI_LU_INDEX);
} }
DEV_STAT_SCSI_LU_ATTR_RO(indx);
static ssize_t target_stat_scsi_lu_show_attr_lun( static ssize_t target_stat_lu_lun_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
/* FIXME: scsiLuDefaultLun */ /* FIXME: scsiLuDefaultLun */
return snprintf(page, PAGE_SIZE, "%llu\n", (unsigned long long)0); return snprintf(page, PAGE_SIZE, "%llu\n", (unsigned long long)0);
} }
DEV_STAT_SCSI_LU_ATTR_RO(lun);
static ssize_t target_stat_scsi_lu_show_attr_lu_name( static ssize_t target_stat_lu_lu_name_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = struct se_device *dev = to_stat_lu_dev(item);
container_of(sgrps, struct se_device, dev_stat_grps);
/* scsiLuWwnName */ /* scsiLuWwnName */
return snprintf(page, PAGE_SIZE, "%s\n", return snprintf(page, PAGE_SIZE, "%s\n",
(strlen(dev->t10_wwn.unit_serial)) ? (strlen(dev->t10_wwn.unit_serial)) ?
dev->t10_wwn.unit_serial : "None"); dev->t10_wwn.unit_serial : "None");
} }
DEV_STAT_SCSI_LU_ATTR_RO(lu_name);
static ssize_t target_stat_scsi_lu_show_attr_vend( static ssize_t target_stat_lu_vend_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = struct se_device *dev = to_stat_lu_dev(item);
container_of(sgrps, struct se_device, dev_stat_grps);
int i; int i;
char str[sizeof(dev->t10_wwn.vendor)+1]; char str[sizeof(dev->t10_wwn.vendor)+1];
...@@ -318,13 +238,10 @@ static ssize_t target_stat_scsi_lu_show_attr_vend( ...@@ -318,13 +238,10 @@ static ssize_t target_stat_scsi_lu_show_attr_vend(
str[i] = '\0'; str[i] = '\0';
return snprintf(page, PAGE_SIZE, "%s\n", str); return snprintf(page, PAGE_SIZE, "%s\n", str);
} }
DEV_STAT_SCSI_LU_ATTR_RO(vend);
static ssize_t target_stat_scsi_lu_show_attr_prod( static ssize_t target_stat_lu_prod_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = struct se_device *dev = to_stat_lu_dev(item);
container_of(sgrps, struct se_device, dev_stat_grps);
int i; int i;
char str[sizeof(dev->t10_wwn.model)+1]; char str[sizeof(dev->t10_wwn.model)+1];
...@@ -335,13 +252,10 @@ static ssize_t target_stat_scsi_lu_show_attr_prod( ...@@ -335,13 +252,10 @@ static ssize_t target_stat_scsi_lu_show_attr_prod(
str[i] = '\0'; str[i] = '\0';
return snprintf(page, PAGE_SIZE, "%s\n", str); return snprintf(page, PAGE_SIZE, "%s\n", str);
} }
DEV_STAT_SCSI_LU_ATTR_RO(prod);
static ssize_t target_stat_scsi_lu_show_attr_rev( static ssize_t target_stat_lu_rev_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = struct se_device *dev = to_stat_lu_dev(item);
container_of(sgrps, struct se_device, dev_stat_grps);
int i; int i;
char str[sizeof(dev->t10_wwn.revision)+1]; char str[sizeof(dev->t10_wwn.revision)+1];
...@@ -352,146 +266,137 @@ static ssize_t target_stat_scsi_lu_show_attr_rev( ...@@ -352,146 +266,137 @@ static ssize_t target_stat_scsi_lu_show_attr_rev(
str[i] = '\0'; str[i] = '\0';
return snprintf(page, PAGE_SIZE, "%s\n", str); return snprintf(page, PAGE_SIZE, "%s\n", str);
} }
DEV_STAT_SCSI_LU_ATTR_RO(rev);
static ssize_t target_stat_scsi_lu_show_attr_dev_type( static ssize_t target_stat_lu_dev_type_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = struct se_device *dev = to_stat_lu_dev(item);
container_of(sgrps, struct se_device, dev_stat_grps);
/* scsiLuPeripheralType */ /* scsiLuPeripheralType */
return snprintf(page, PAGE_SIZE, "%u\n", return snprintf(page, PAGE_SIZE, "%u\n",
dev->transport->get_device_type(dev)); dev->transport->get_device_type(dev));
} }
DEV_STAT_SCSI_LU_ATTR_RO(dev_type);
static ssize_t target_stat_scsi_lu_show_attr_status( static ssize_t target_stat_lu_status_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = struct se_device *dev = to_stat_lu_dev(item);
container_of(sgrps, struct se_device, dev_stat_grps);
/* scsiLuStatus */ /* scsiLuStatus */
return snprintf(page, PAGE_SIZE, "%s\n", return snprintf(page, PAGE_SIZE, "%s\n",
(dev->export_count) ? "available" : "notavailable"); (dev->export_count) ? "available" : "notavailable");
} }
DEV_STAT_SCSI_LU_ATTR_RO(status);
static ssize_t target_stat_scsi_lu_show_attr_state_bit( static ssize_t target_stat_lu_state_bit_show(struct config_item *item,
struct se_dev_stat_grps *sgrps, char *page) char *page)
{ {
/* scsiLuState */ /* scsiLuState */
return snprintf(page, PAGE_SIZE, "exposed\n"); return snprintf(page, PAGE_SIZE, "exposed\n");
} }
DEV_STAT_SCSI_LU_ATTR_RO(state_bit);
static ssize_t target_stat_scsi_lu_show_attr_num_cmds( static ssize_t target_stat_lu_num_cmds_show(struct config_item *item,
struct se_dev_stat_grps *sgrps, char *page) char *page)
{ {
struct se_device *dev = struct se_device *dev = to_stat_lu_dev(item);
container_of(sgrps, struct se_device, dev_stat_grps);
/* scsiLuNumCommands */ /* scsiLuNumCommands */
return snprintf(page, PAGE_SIZE, "%lu\n", return snprintf(page, PAGE_SIZE, "%lu\n",
atomic_long_read(&dev->num_cmds)); atomic_long_read(&dev->num_cmds));
} }
DEV_STAT_SCSI_LU_ATTR_RO(num_cmds);
static ssize_t target_stat_scsi_lu_show_attr_read_mbytes( static ssize_t target_stat_lu_read_mbytes_show(struct config_item *item,
struct se_dev_stat_grps *sgrps, char *page) char *page)
{ {
struct se_device *dev = struct se_device *dev = to_stat_lu_dev(item);
container_of(sgrps, struct se_device, dev_stat_grps);
/* scsiLuReadMegaBytes */ /* scsiLuReadMegaBytes */
return snprintf(page, PAGE_SIZE, "%lu\n", return snprintf(page, PAGE_SIZE, "%lu\n",
atomic_long_read(&dev->read_bytes) >> 20); atomic_long_read(&dev->read_bytes) >> 20);
} }
DEV_STAT_SCSI_LU_ATTR_RO(read_mbytes);
static ssize_t target_stat_scsi_lu_show_attr_write_mbytes( static ssize_t target_stat_lu_write_mbytes_show(struct config_item *item,
struct se_dev_stat_grps *sgrps, char *page) char *page)
{ {
struct se_device *dev = struct se_device *dev = to_stat_lu_dev(item);
container_of(sgrps, struct se_device, dev_stat_grps);
/* scsiLuWrittenMegaBytes */ /* scsiLuWrittenMegaBytes */
return snprintf(page, PAGE_SIZE, "%lu\n", return snprintf(page, PAGE_SIZE, "%lu\n",
atomic_long_read(&dev->write_bytes) >> 20); atomic_long_read(&dev->write_bytes) >> 20);
} }
DEV_STAT_SCSI_LU_ATTR_RO(write_mbytes);
static ssize_t target_stat_scsi_lu_show_attr_resets( static ssize_t target_stat_lu_resets_show(struct config_item *item, char *page)
struct se_dev_stat_grps *sgrps, char *page)
{ {
struct se_device *dev = struct se_device *dev = to_stat_lu_dev(item);
container_of(sgrps, struct se_device, dev_stat_grps);
/* scsiLuInResets */ /* scsiLuInResets */
return snprintf(page, PAGE_SIZE, "%lu\n", atomic_long_read(&dev->num_resets)); return snprintf(page, PAGE_SIZE, "%lu\n",
atomic_long_read(&dev->num_resets));
} }
DEV_STAT_SCSI_LU_ATTR_RO(resets);
static ssize_t target_stat_scsi_lu_show_attr_full_stat( static ssize_t target_stat_lu_full_stat_show(struct config_item *item,
struct se_dev_stat_grps *sgrps, char *page) char *page)
{ {
/* FIXME: scsiLuOutTaskSetFullStatus */ /* FIXME: scsiLuOutTaskSetFullStatus */
return snprintf(page, PAGE_SIZE, "%u\n", 0); return snprintf(page, PAGE_SIZE, "%u\n", 0);
} }
DEV_STAT_SCSI_LU_ATTR_RO(full_stat);
static ssize_t target_stat_scsi_lu_show_attr_hs_num_cmds( static ssize_t target_stat_lu_hs_num_cmds_show(struct config_item *item,
struct se_dev_stat_grps *sgrps, char *page) char *page)
{ {
/* FIXME: scsiLuHSInCommands */ /* FIXME: scsiLuHSInCommands */
return snprintf(page, PAGE_SIZE, "%u\n", 0); return snprintf(page, PAGE_SIZE, "%u\n", 0);
} }
DEV_STAT_SCSI_LU_ATTR_RO(hs_num_cmds);
static ssize_t target_stat_scsi_lu_show_attr_creation_time( static ssize_t target_stat_lu_creation_time_show(struct config_item *item,
struct se_dev_stat_grps *sgrps, char *page) char *page)
{ {
struct se_device *dev = struct se_device *dev = to_stat_lu_dev(item);
container_of(sgrps, struct se_device, dev_stat_grps);
/* scsiLuCreationTime */ /* scsiLuCreationTime */
return snprintf(page, PAGE_SIZE, "%u\n", (u32)(((u32)dev->creation_time - return snprintf(page, PAGE_SIZE, "%u\n", (u32)(((u32)dev->creation_time -
INITIAL_JIFFIES) * 100 / HZ)); INITIAL_JIFFIES) * 100 / HZ));
} }
DEV_STAT_SCSI_LU_ATTR_RO(creation_time);
CONFIGFS_EATTR_OPS(target_stat_scsi_lu, se_dev_stat_grps, scsi_lu_group); CONFIGFS_ATTR_RO(target_stat_lu_, inst);
CONFIGFS_ATTR_RO(target_stat_lu_, dev);
CONFIGFS_ATTR_RO(target_stat_lu_, indx);
CONFIGFS_ATTR_RO(target_stat_lu_, lun);
CONFIGFS_ATTR_RO(target_stat_lu_, lu_name);
CONFIGFS_ATTR_RO(target_stat_lu_, vend);
CONFIGFS_ATTR_RO(target_stat_lu_, prod);
CONFIGFS_ATTR_RO(target_stat_lu_, rev);
CONFIGFS_ATTR_RO(target_stat_lu_, dev_type);
CONFIGFS_ATTR_RO(target_stat_lu_, status);
CONFIGFS_ATTR_RO(target_stat_lu_, state_bit);
CONFIGFS_ATTR_RO(target_stat_lu_, num_cmds);
CONFIGFS_ATTR_RO(target_stat_lu_, read_mbytes);
CONFIGFS_ATTR_RO(target_stat_lu_, write_mbytes);
CONFIGFS_ATTR_RO(target_stat_lu_, resets);
CONFIGFS_ATTR_RO(target_stat_lu_, full_stat);
CONFIGFS_ATTR_RO(target_stat_lu_, hs_num_cmds);
CONFIGFS_ATTR_RO(target_stat_lu_, creation_time);
static struct configfs_attribute *target_stat_scsi_lu_attrs[] = { static struct configfs_attribute *target_stat_scsi_lu_attrs[] = {
&target_stat_scsi_lu_inst.attr, &target_stat_lu_attr_inst,
&target_stat_scsi_lu_dev.attr, &target_stat_lu_attr_dev,
&target_stat_scsi_lu_indx.attr, &target_stat_lu_attr_indx,
&target_stat_scsi_lu_lun.attr, &target_stat_lu_attr_lun,
&target_stat_scsi_lu_lu_name.attr, &target_stat_lu_attr_lu_name,
&target_stat_scsi_lu_vend.attr, &target_stat_lu_attr_vend,
&target_stat_scsi_lu_prod.attr, &target_stat_lu_attr_prod,
&target_stat_scsi_lu_rev.attr, &target_stat_lu_attr_rev,
&target_stat_scsi_lu_dev_type.attr, &target_stat_lu_attr_dev_type,
&target_stat_scsi_lu_status.attr, &target_stat_lu_attr_status,
&target_stat_scsi_lu_state_bit.attr, &target_stat_lu_attr_state_bit,
&target_stat_scsi_lu_num_cmds.attr, &target_stat_lu_attr_num_cmds,
&target_stat_scsi_lu_read_mbytes.attr, &target_stat_lu_attr_read_mbytes,
&target_stat_scsi_lu_write_mbytes.attr, &target_stat_lu_attr_write_mbytes,
&target_stat_scsi_lu_resets.attr, &target_stat_lu_attr_resets,
&target_stat_scsi_lu_full_stat.attr, &target_stat_lu_attr_full_stat,
&target_stat_scsi_lu_hs_num_cmds.attr, &target_stat_lu_attr_hs_num_cmds,
&target_stat_scsi_lu_creation_time.attr, &target_stat_lu_attr_creation_time,
NULL, NULL,
}; };
static struct configfs_item_operations target_stat_scsi_lu_attrib_ops = {
.show_attribute = target_stat_scsi_lu_attr_show,
.store_attribute = target_stat_scsi_lu_attr_store,
};
static struct config_item_type target_stat_scsi_lu_cit = { static struct config_item_type target_stat_scsi_lu_cit = {
.ct_item_ops = &target_stat_scsi_lu_attrib_ops,
.ct_attrs = target_stat_scsi_lu_attrs, .ct_attrs = target_stat_scsi_lu_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -521,24 +426,16 @@ void target_stat_setup_dev_default_groups(struct se_device *dev) ...@@ -521,24 +426,16 @@ void target_stat_setup_dev_default_groups(struct se_device *dev)
* SCSI Port Table * SCSI Port Table
*/ */
CONFIGFS_EATTR_STRUCT(target_stat_scsi_port, se_port_stat_grps); static struct se_lun *to_stat_port(struct config_item *item)
#define DEV_STAT_SCSI_PORT_ATTR(_name, _mode) \ {
static struct target_stat_scsi_port_attribute \ struct se_port_stat_grps *pgrps = container_of(to_config_group(item),
target_stat_scsi_port_##_name = \ struct se_port_stat_grps, scsi_port_group);
__CONFIGFS_EATTR(_name, _mode, \ return container_of(pgrps, struct se_lun, port_stat_grps);
target_stat_scsi_port_show_attr_##_name, \ }
target_stat_scsi_port_store_attr_##_name);
#define DEV_STAT_SCSI_PORT_ATTR_RO(_name) \
static struct target_stat_scsi_port_attribute \
target_stat_scsi_port_##_name = \
__CONFIGFS_EATTR_RO(_name, \
target_stat_scsi_port_show_attr_##_name);
static ssize_t target_stat_scsi_port_show_attr_inst( static ssize_t target_stat_port_inst_show(struct config_item *item, char *page)
struct se_port_stat_grps *pgrps, char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_port(item);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -549,12 +446,10 @@ static ssize_t target_stat_scsi_port_show_attr_inst( ...@@ -549,12 +446,10 @@ static ssize_t target_stat_scsi_port_show_attr_inst(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_PORT_ATTR_RO(inst);
static ssize_t target_stat_scsi_port_show_attr_dev( static ssize_t target_stat_port_dev_show(struct config_item *item, char *page)
struct se_port_stat_grps *pgrps, char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_port(item);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -565,12 +460,10 @@ static ssize_t target_stat_scsi_port_show_attr_dev( ...@@ -565,12 +460,10 @@ static ssize_t target_stat_scsi_port_show_attr_dev(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_PORT_ATTR_RO(dev);
static ssize_t target_stat_scsi_port_show_attr_indx( static ssize_t target_stat_port_indx_show(struct config_item *item, char *page)
struct se_port_stat_grps *pgrps, char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_port(item);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -581,12 +474,10 @@ static ssize_t target_stat_scsi_port_show_attr_indx( ...@@ -581,12 +474,10 @@ static ssize_t target_stat_scsi_port_show_attr_indx(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_PORT_ATTR_RO(indx);
static ssize_t target_stat_scsi_port_show_attr_role( static ssize_t target_stat_port_role_show(struct config_item *item, char *page)
struct se_port_stat_grps *pgrps, char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_port(item);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -597,12 +488,11 @@ static ssize_t target_stat_scsi_port_show_attr_role( ...@@ -597,12 +488,11 @@ static ssize_t target_stat_scsi_port_show_attr_role(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_PORT_ATTR_RO(role);
static ssize_t target_stat_scsi_port_show_attr_busy_count( static ssize_t target_stat_port_busy_count_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_port(item);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -615,26 +505,23 @@ static ssize_t target_stat_scsi_port_show_attr_busy_count( ...@@ -615,26 +505,23 @@ static ssize_t target_stat_scsi_port_show_attr_busy_count(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_PORT_ATTR_RO(busy_count);
CONFIGFS_EATTR_OPS(target_stat_scsi_port, se_port_stat_grps, scsi_port_group); CONFIGFS_ATTR_RO(target_stat_port_, inst);
CONFIGFS_ATTR_RO(target_stat_port_, dev);
CONFIGFS_ATTR_RO(target_stat_port_, indx);
CONFIGFS_ATTR_RO(target_stat_port_, role);
CONFIGFS_ATTR_RO(target_stat_port_, busy_count);
static struct configfs_attribute *target_stat_scsi_port_attrs[] = { static struct configfs_attribute *target_stat_scsi_port_attrs[] = {
&target_stat_scsi_port_inst.attr, &target_stat_port_attr_inst,
&target_stat_scsi_port_dev.attr, &target_stat_port_attr_dev,
&target_stat_scsi_port_indx.attr, &target_stat_port_attr_indx,
&target_stat_scsi_port_role.attr, &target_stat_port_attr_role,
&target_stat_scsi_port_busy_count.attr, &target_stat_port_attr_busy_count,
NULL, NULL,
}; };
static struct configfs_item_operations target_stat_scsi_port_attrib_ops = {
.show_attribute = target_stat_scsi_port_attr_show,
.store_attribute = target_stat_scsi_port_attr_store,
};
static struct config_item_type target_stat_scsi_port_cit = { static struct config_item_type target_stat_scsi_port_cit = {
.ct_item_ops = &target_stat_scsi_port_attrib_ops,
.ct_attrs = target_stat_scsi_port_attrs, .ct_attrs = target_stat_scsi_port_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -642,24 +529,17 @@ static struct config_item_type target_stat_scsi_port_cit = { ...@@ -642,24 +529,17 @@ static struct config_item_type target_stat_scsi_port_cit = {
/* /*
* SCSI Target Port Table * SCSI Target Port Table
*/ */
CONFIGFS_EATTR_STRUCT(target_stat_scsi_tgt_port, se_port_stat_grps); static struct se_lun *to_stat_tgt_port(struct config_item *item)
#define DEV_STAT_SCSI_TGT_PORT_ATTR(_name, _mode) \ {
static struct target_stat_scsi_tgt_port_attribute \ struct se_port_stat_grps *pgrps = container_of(to_config_group(item),
target_stat_scsi_tgt_port_##_name = \ struct se_port_stat_grps, scsi_tgt_port_group);
__CONFIGFS_EATTR(_name, _mode, \ return container_of(pgrps, struct se_lun, port_stat_grps);
target_stat_scsi_tgt_port_show_attr_##_name, \ }
target_stat_scsi_tgt_port_store_attr_##_name);
static ssize_t target_stat_tgt_port_inst_show(struct config_item *item,
#define DEV_STAT_SCSI_TGT_PORT_ATTR_RO(_name) \ char *page)
static struct target_stat_scsi_tgt_port_attribute \ {
target_stat_scsi_tgt_port_##_name = \ struct se_lun *lun = to_stat_tgt_port(item);
__CONFIGFS_EATTR_RO(_name, \
target_stat_scsi_tgt_port_show_attr_##_name);
static ssize_t target_stat_scsi_tgt_port_show_attr_inst(
struct se_port_stat_grps *pgrps, char *page)
{
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -670,12 +550,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_inst( ...@@ -670,12 +550,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_inst(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TGT_PORT_ATTR_RO(inst);
static ssize_t target_stat_scsi_tgt_port_show_attr_dev( static ssize_t target_stat_tgt_port_dev_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_tgt_port(item);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -686,12 +565,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_dev( ...@@ -686,12 +565,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_dev(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TGT_PORT_ATTR_RO(dev);
static ssize_t target_stat_scsi_tgt_port_show_attr_indx( static ssize_t target_stat_tgt_port_indx_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_tgt_port(item);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -702,12 +580,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_indx( ...@@ -702,12 +580,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_indx(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TGT_PORT_ATTR_RO(indx);
static ssize_t target_stat_scsi_tgt_port_show_attr_name( static ssize_t target_stat_tgt_port_name_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_tgt_port(item);
struct se_portal_group *tpg = lun->lun_tpg; struct se_portal_group *tpg = lun->lun_tpg;
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -721,12 +598,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_name( ...@@ -721,12 +598,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_name(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TGT_PORT_ATTR_RO(name);
static ssize_t target_stat_scsi_tgt_port_show_attr_port_index( static ssize_t target_stat_tgt_port_port_index_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_tgt_port(item);
struct se_portal_group *tpg = lun->lun_tpg; struct se_portal_group *tpg = lun->lun_tpg;
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -740,12 +616,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_port_index( ...@@ -740,12 +616,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_port_index(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TGT_PORT_ATTR_RO(port_index);
static ssize_t target_stat_scsi_tgt_port_show_attr_in_cmds( static ssize_t target_stat_tgt_port_in_cmds_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_tgt_port(item);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -757,12 +632,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_in_cmds( ...@@ -757,12 +632,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_in_cmds(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TGT_PORT_ATTR_RO(in_cmds);
static ssize_t target_stat_scsi_tgt_port_show_attr_write_mbytes( static ssize_t target_stat_tgt_port_write_mbytes_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_tgt_port(item);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -774,12 +648,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_write_mbytes( ...@@ -774,12 +648,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_write_mbytes(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TGT_PORT_ATTR_RO(write_mbytes);
static ssize_t target_stat_scsi_tgt_port_show_attr_read_mbytes( static ssize_t target_stat_tgt_port_read_mbytes_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_tgt_port(item);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -791,12 +664,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_read_mbytes( ...@@ -791,12 +664,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_read_mbytes(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TGT_PORT_ATTR_RO(read_mbytes);
static ssize_t target_stat_scsi_tgt_port_show_attr_hs_in_cmds( static ssize_t target_stat_tgt_port_hs_in_cmds_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_stat_tgt_port(item);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -809,57 +681,49 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_hs_in_cmds( ...@@ -809,57 +681,49 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_hs_in_cmds(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TGT_PORT_ATTR_RO(hs_in_cmds);
CONFIGFS_EATTR_OPS(target_stat_scsi_tgt_port, se_port_stat_grps, CONFIGFS_ATTR_RO(target_stat_tgt_port_, inst);
scsi_tgt_port_group); CONFIGFS_ATTR_RO(target_stat_tgt_port_, dev);
CONFIGFS_ATTR_RO(target_stat_tgt_port_, indx);
CONFIGFS_ATTR_RO(target_stat_tgt_port_, name);
CONFIGFS_ATTR_RO(target_stat_tgt_port_, port_index);
CONFIGFS_ATTR_RO(target_stat_tgt_port_, in_cmds);
CONFIGFS_ATTR_RO(target_stat_tgt_port_, write_mbytes);
CONFIGFS_ATTR_RO(target_stat_tgt_port_, read_mbytes);
CONFIGFS_ATTR_RO(target_stat_tgt_port_, hs_in_cmds);
static struct configfs_attribute *target_stat_scsi_tgt_port_attrs[] = { static struct configfs_attribute *target_stat_scsi_tgt_port_attrs[] = {
&target_stat_scsi_tgt_port_inst.attr, &target_stat_tgt_port_attr_inst,
&target_stat_scsi_tgt_port_dev.attr, &target_stat_tgt_port_attr_dev,
&target_stat_scsi_tgt_port_indx.attr, &target_stat_tgt_port_attr_indx,
&target_stat_scsi_tgt_port_name.attr, &target_stat_tgt_port_attr_name,
&target_stat_scsi_tgt_port_port_index.attr, &target_stat_tgt_port_attr_port_index,
&target_stat_scsi_tgt_port_in_cmds.attr, &target_stat_tgt_port_attr_in_cmds,
&target_stat_scsi_tgt_port_write_mbytes.attr, &target_stat_tgt_port_attr_write_mbytes,
&target_stat_scsi_tgt_port_read_mbytes.attr, &target_stat_tgt_port_attr_read_mbytes,
&target_stat_scsi_tgt_port_hs_in_cmds.attr, &target_stat_tgt_port_attr_hs_in_cmds,
NULL, NULL,
}; };
static struct configfs_item_operations target_stat_scsi_tgt_port_attrib_ops = {
.show_attribute = target_stat_scsi_tgt_port_attr_show,
.store_attribute = target_stat_scsi_tgt_port_attr_store,
};
static struct config_item_type target_stat_scsi_tgt_port_cit = { static struct config_item_type target_stat_scsi_tgt_port_cit = {
.ct_item_ops = &target_stat_scsi_tgt_port_attrib_ops,
.ct_attrs = target_stat_scsi_tgt_port_attrs, .ct_attrs = target_stat_scsi_tgt_port_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
/* /*
* SCSI Transport Table * SCSI Transport Table
o */ */
static struct se_lun *to_transport_stat(struct config_item *item)
CONFIGFS_EATTR_STRUCT(target_stat_scsi_transport, se_port_stat_grps); {
#define DEV_STAT_SCSI_TRANSPORT_ATTR(_name, _mode) \ struct se_port_stat_grps *pgrps = container_of(to_config_group(item),
static struct target_stat_scsi_transport_attribute \ struct se_port_stat_grps, scsi_transport_group);
target_stat_scsi_transport_##_name = \ return container_of(pgrps, struct se_lun, port_stat_grps);
__CONFIGFS_EATTR(_name, _mode, \ }
target_stat_scsi_transport_show_attr_##_name, \
target_stat_scsi_transport_store_attr_##_name); static ssize_t target_stat_transport_inst_show(struct config_item *item,
char *page)
#define DEV_STAT_SCSI_TRANSPORT_ATTR_RO(_name) \ {
static struct target_stat_scsi_transport_attribute \ struct se_lun *lun = to_transport_stat(item);
target_stat_scsi_transport_##_name = \
__CONFIGFS_EATTR_RO(_name, \
target_stat_scsi_transport_show_attr_##_name);
static ssize_t target_stat_scsi_transport_show_attr_inst(
struct se_port_stat_grps *pgrps, char *page)
{
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps);
struct se_device *dev; struct se_device *dev;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -870,12 +734,11 @@ static ssize_t target_stat_scsi_transport_show_attr_inst( ...@@ -870,12 +734,11 @@ static ssize_t target_stat_scsi_transport_show_attr_inst(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TRANSPORT_ATTR_RO(inst);
static ssize_t target_stat_scsi_transport_show_attr_device( static ssize_t target_stat_transport_device_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_transport_stat(item);
struct se_device *dev; struct se_device *dev;
struct se_portal_group *tpg = lun->lun_tpg; struct se_portal_group *tpg = lun->lun_tpg;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -890,12 +753,11 @@ static ssize_t target_stat_scsi_transport_show_attr_device( ...@@ -890,12 +753,11 @@ static ssize_t target_stat_scsi_transport_show_attr_device(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TRANSPORT_ATTR_RO(device);
static ssize_t target_stat_scsi_transport_show_attr_indx( static ssize_t target_stat_transport_indx_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_transport_stat(item);
struct se_device *dev; struct se_device *dev;
struct se_portal_group *tpg = lun->lun_tpg; struct se_portal_group *tpg = lun->lun_tpg;
ssize_t ret = -ENODEV; ssize_t ret = -ENODEV;
...@@ -908,12 +770,11 @@ static ssize_t target_stat_scsi_transport_show_attr_indx( ...@@ -908,12 +770,11 @@ static ssize_t target_stat_scsi_transport_show_attr_indx(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TRANSPORT_ATTR_RO(indx);
static ssize_t target_stat_scsi_transport_show_attr_dev_name( static ssize_t target_stat_transport_dev_name_show(struct config_item *item,
struct se_port_stat_grps *pgrps, char *page) char *page)
{ {
struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); struct se_lun *lun = to_transport_stat(item);
struct se_device *dev; struct se_device *dev;
struct se_portal_group *tpg = lun->lun_tpg; struct se_portal_group *tpg = lun->lun_tpg;
struct t10_wwn *wwn; struct t10_wwn *wwn;
...@@ -932,26 +793,21 @@ static ssize_t target_stat_scsi_transport_show_attr_dev_name( ...@@ -932,26 +793,21 @@ static ssize_t target_stat_scsi_transport_show_attr_dev_name(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_TRANSPORT_ATTR_RO(dev_name);
CONFIGFS_EATTR_OPS(target_stat_scsi_transport, se_port_stat_grps, CONFIGFS_ATTR_RO(target_stat_transport_, inst);
scsi_transport_group); CONFIGFS_ATTR_RO(target_stat_transport_, device);
CONFIGFS_ATTR_RO(target_stat_transport_, indx);
CONFIGFS_ATTR_RO(target_stat_transport_, dev_name);
static struct configfs_attribute *target_stat_scsi_transport_attrs[] = { static struct configfs_attribute *target_stat_scsi_transport_attrs[] = {
&target_stat_scsi_transport_inst.attr, &target_stat_transport_attr_inst,
&target_stat_scsi_transport_device.attr, &target_stat_transport_attr_device,
&target_stat_scsi_transport_indx.attr, &target_stat_transport_attr_indx,
&target_stat_scsi_transport_dev_name.attr, &target_stat_transport_attr_dev_name,
NULL, NULL,
}; };
static struct configfs_item_operations target_stat_scsi_transport_attrib_ops = {
.show_attribute = target_stat_scsi_transport_attr_show,
.store_attribute = target_stat_scsi_transport_attr_store,
};
static struct config_item_type target_stat_scsi_transport_cit = { static struct config_item_type target_stat_scsi_transport_cit = {
.ct_item_ops = &target_stat_scsi_transport_attrib_ops,
.ct_attrs = target_stat_scsi_transport_attrs, .ct_attrs = target_stat_scsi_transport_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -981,25 +837,17 @@ void target_stat_setup_port_default_groups(struct se_lun *lun) ...@@ -981,25 +837,17 @@ void target_stat_setup_port_default_groups(struct se_lun *lun)
* SCSI Authorized Initiator Table * SCSI Authorized Initiator Table
*/ */
CONFIGFS_EATTR_STRUCT(target_stat_scsi_auth_intr, se_ml_stat_grps); static struct se_lun_acl *auth_to_lacl(struct config_item *item)
#define DEV_STAT_SCSI_AUTH_INTR_ATTR(_name, _mode) \ {
static struct target_stat_scsi_auth_intr_attribute \ struct se_ml_stat_grps *lgrps = container_of(to_config_group(item),
target_stat_scsi_auth_intr_##_name = \ struct se_ml_stat_grps, scsi_auth_intr_group);
__CONFIGFS_EATTR(_name, _mode, \ return container_of(lgrps, struct se_lun_acl, ml_stat_grps);
target_stat_scsi_auth_intr_show_attr_##_name, \ }
target_stat_scsi_auth_intr_store_attr_##_name);
static ssize_t target_stat_auth_inst_show(struct config_item *item,
#define DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(_name) \ char *page)
static struct target_stat_scsi_auth_intr_attribute \ {
target_stat_scsi_auth_intr_##_name = \ struct se_lun_acl *lacl = auth_to_lacl(item);
__CONFIGFS_EATTR_RO(_name, \
target_stat_scsi_auth_intr_show_attr_##_name);
static ssize_t target_stat_scsi_auth_intr_show_attr_inst(
struct se_ml_stat_grps *lgrps, char *page)
{
struct se_lun_acl *lacl = container_of(lgrps,
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
struct se_portal_group *tpg; struct se_portal_group *tpg;
...@@ -1018,13 +866,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_inst( ...@@ -1018,13 +866,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_inst(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(inst);
static ssize_t target_stat_scsi_auth_intr_show_attr_dev( static ssize_t target_stat_auth_dev_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
struct se_lun *lun; struct se_lun *lun;
...@@ -1042,13 +888,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_dev( ...@@ -1042,13 +888,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_dev(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(dev);
static ssize_t target_stat_scsi_auth_intr_show_attr_port( static ssize_t target_stat_auth_port_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
struct se_portal_group *tpg; struct se_portal_group *tpg;
...@@ -1066,13 +910,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_port( ...@@ -1066,13 +910,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_port(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(port);
static ssize_t target_stat_scsi_auth_intr_show_attr_indx( static ssize_t target_stat_auth_indx_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1088,13 +930,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_indx( ...@@ -1088,13 +930,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_indx(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(indx);
static ssize_t target_stat_scsi_auth_intr_show_attr_dev_or_port( static ssize_t target_stat_auth_dev_or_port_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1110,13 +950,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_dev_or_port( ...@@ -1110,13 +950,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_dev_or_port(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(dev_or_port);
static ssize_t target_stat_scsi_auth_intr_show_attr_intr_name( static ssize_t target_stat_auth_intr_name_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1132,13 +970,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_intr_name( ...@@ -1132,13 +970,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_intr_name(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(intr_name);
static ssize_t target_stat_scsi_auth_intr_show_attr_map_indx( static ssize_t target_stat_auth_map_indx_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1154,13 +990,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_map_indx( ...@@ -1154,13 +990,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_map_indx(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(map_indx);
static ssize_t target_stat_scsi_auth_intr_show_attr_att_count( static ssize_t target_stat_auth_att_count_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1176,13 +1010,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_att_count( ...@@ -1176,13 +1010,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_att_count(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(att_count);
static ssize_t target_stat_scsi_auth_intr_show_attr_num_cmds( static ssize_t target_stat_auth_num_cmds_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1199,13 +1031,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_num_cmds( ...@@ -1199,13 +1031,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_num_cmds(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(num_cmds);
static ssize_t target_stat_scsi_auth_intr_show_attr_read_mbytes( static ssize_t target_stat_auth_read_mbytes_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1222,13 +1052,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_read_mbytes( ...@@ -1222,13 +1052,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_read_mbytes(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(read_mbytes);
static ssize_t target_stat_scsi_auth_intr_show_attr_write_mbytes( static ssize_t target_stat_auth_write_mbytes_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1245,13 +1073,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_write_mbytes( ...@@ -1245,13 +1073,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_write_mbytes(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(write_mbytes);
static ssize_t target_stat_scsi_auth_intr_show_attr_hs_num_cmds( static ssize_t target_stat_auth_hs_num_cmds_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1267,13 +1093,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_hs_num_cmds( ...@@ -1267,13 +1093,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_hs_num_cmds(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(hs_num_cmds);
static ssize_t target_stat_scsi_auth_intr_show_attr_creation_time( static ssize_t target_stat_auth_creation_time_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1290,13 +1114,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_creation_time( ...@@ -1290,13 +1114,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_creation_time(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(creation_time);
static ssize_t target_stat_scsi_auth_intr_show_attr_row_status( static ssize_t target_stat_auth_row_status_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = auth_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1312,36 +1134,41 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_row_status( ...@@ -1312,36 +1134,41 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_row_status(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(row_status);
CONFIGFS_EATTR_OPS(target_stat_scsi_auth_intr, se_ml_stat_grps, CONFIGFS_ATTR_RO(target_stat_auth_, inst);
scsi_auth_intr_group); CONFIGFS_ATTR_RO(target_stat_auth_, dev);
CONFIGFS_ATTR_RO(target_stat_auth_, port);
CONFIGFS_ATTR_RO(target_stat_auth_, indx);
CONFIGFS_ATTR_RO(target_stat_auth_, dev_or_port);
CONFIGFS_ATTR_RO(target_stat_auth_, intr_name);
CONFIGFS_ATTR_RO(target_stat_auth_, map_indx);
CONFIGFS_ATTR_RO(target_stat_auth_, att_count);
CONFIGFS_ATTR_RO(target_stat_auth_, num_cmds);
CONFIGFS_ATTR_RO(target_stat_auth_, read_mbytes);
CONFIGFS_ATTR_RO(target_stat_auth_, write_mbytes);
CONFIGFS_ATTR_RO(target_stat_auth_, hs_num_cmds);
CONFIGFS_ATTR_RO(target_stat_auth_, creation_time);
CONFIGFS_ATTR_RO(target_stat_auth_, row_status);
static struct configfs_attribute *target_stat_scsi_auth_intr_attrs[] = { static struct configfs_attribute *target_stat_scsi_auth_intr_attrs[] = {
&target_stat_scsi_auth_intr_inst.attr, &target_stat_auth_attr_inst,
&target_stat_scsi_auth_intr_dev.attr, &target_stat_auth_attr_dev,
&target_stat_scsi_auth_intr_port.attr, &target_stat_auth_attr_port,
&target_stat_scsi_auth_intr_indx.attr, &target_stat_auth_attr_indx,
&target_stat_scsi_auth_intr_dev_or_port.attr, &target_stat_auth_attr_dev_or_port,
&target_stat_scsi_auth_intr_intr_name.attr, &target_stat_auth_attr_intr_name,
&target_stat_scsi_auth_intr_map_indx.attr, &target_stat_auth_attr_map_indx,
&target_stat_scsi_auth_intr_att_count.attr, &target_stat_auth_attr_att_count,
&target_stat_scsi_auth_intr_num_cmds.attr, &target_stat_auth_attr_num_cmds,
&target_stat_scsi_auth_intr_read_mbytes.attr, &target_stat_auth_attr_read_mbytes,
&target_stat_scsi_auth_intr_write_mbytes.attr, &target_stat_auth_attr_write_mbytes,
&target_stat_scsi_auth_intr_hs_num_cmds.attr, &target_stat_auth_attr_hs_num_cmds,
&target_stat_scsi_auth_intr_creation_time.attr, &target_stat_auth_attr_creation_time,
&target_stat_scsi_auth_intr_row_status.attr, &target_stat_auth_attr_row_status,
NULL, NULL,
}; };
static struct configfs_item_operations target_stat_scsi_auth_intr_attrib_ops = {
.show_attribute = target_stat_scsi_auth_intr_attr_show,
.store_attribute = target_stat_scsi_auth_intr_attr_store,
};
static struct config_item_type target_stat_scsi_auth_intr_cit = { static struct config_item_type target_stat_scsi_auth_intr_cit = {
.ct_item_ops = &target_stat_scsi_auth_intr_attrib_ops,
.ct_attrs = target_stat_scsi_auth_intr_attrs, .ct_attrs = target_stat_scsi_auth_intr_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
...@@ -1350,25 +1177,17 @@ static struct config_item_type target_stat_scsi_auth_intr_cit = { ...@@ -1350,25 +1177,17 @@ static struct config_item_type target_stat_scsi_auth_intr_cit = {
* SCSI Attached Initiator Port Table * SCSI Attached Initiator Port Table
*/ */
CONFIGFS_EATTR_STRUCT(target_stat_scsi_att_intr_port, se_ml_stat_grps); static struct se_lun_acl *iport_to_lacl(struct config_item *item)
#define DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR(_name, _mode) \ {
static struct target_stat_scsi_att_intr_port_attribute \ struct se_ml_stat_grps *lgrps = container_of(to_config_group(item),
target_stat_scsi_att_intr_port_##_name = \ struct se_ml_stat_grps, scsi_att_intr_port_group);
__CONFIGFS_EATTR(_name, _mode, \ return container_of(lgrps, struct se_lun_acl, ml_stat_grps);
target_stat_scsi_att_intr_port_show_attr_##_name, \ }
target_stat_scsi_att_intr_port_store_attr_##_name);
static ssize_t target_stat_iport_inst_show(struct config_item *item,
#define DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(_name) \ char *page)
static struct target_stat_scsi_att_intr_port_attribute \ {
target_stat_scsi_att_intr_port_##_name = \ struct se_lun_acl *lacl = iport_to_lacl(item);
__CONFIGFS_EATTR_RO(_name, \
target_stat_scsi_att_intr_port_show_attr_##_name);
static ssize_t target_stat_scsi_att_intr_port_show_attr_inst(
struct se_ml_stat_grps *lgrps, char *page)
{
struct se_lun_acl *lacl = container_of(lgrps,
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
struct se_portal_group *tpg; struct se_portal_group *tpg;
...@@ -1387,13 +1206,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_inst( ...@@ -1387,13 +1206,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_inst(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(inst);
static ssize_t target_stat_scsi_att_intr_port_show_attr_dev( static ssize_t target_stat_iport_dev_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = iport_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
struct se_lun *lun; struct se_lun *lun;
...@@ -1411,13 +1228,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_dev( ...@@ -1411,13 +1228,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_dev(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(dev);
static ssize_t target_stat_scsi_att_intr_port_show_attr_port( static ssize_t target_stat_iport_port_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = iport_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
struct se_portal_group *tpg; struct se_portal_group *tpg;
...@@ -1435,13 +1250,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port( ...@@ -1435,13 +1250,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(port);
static ssize_t target_stat_scsi_att_intr_port_show_attr_indx( static ssize_t target_stat_iport_indx_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = iport_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_session *se_sess; struct se_session *se_sess;
struct se_portal_group *tpg; struct se_portal_group *tpg;
...@@ -1461,13 +1274,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_indx( ...@@ -1461,13 +1274,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_indx(
spin_unlock_irq(&nacl->nacl_sess_lock); spin_unlock_irq(&nacl->nacl_sess_lock);
return ret; return ret;
} }
DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(indx);
static ssize_t target_stat_scsi_att_intr_port_show_attr_port_auth_indx( static ssize_t target_stat_iport_port_auth_indx_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = iport_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_dev_entry *deve; struct se_dev_entry *deve;
ssize_t ret; ssize_t ret;
...@@ -1483,13 +1294,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port_auth_indx( ...@@ -1483,13 +1294,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port_auth_indx(
rcu_read_unlock(); rcu_read_unlock();
return ret; return ret;
} }
DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(port_auth_indx);
static ssize_t target_stat_scsi_att_intr_port_show_attr_port_ident( static ssize_t target_stat_iport_port_ident_show(struct config_item *item,
struct se_ml_stat_grps *lgrps, char *page) char *page)
{ {
struct se_lun_acl *lacl = container_of(lgrps, struct se_lun_acl *lacl = iport_to_lacl(item);
struct se_lun_acl, ml_stat_grps);
struct se_node_acl *nacl = lacl->se_lun_nacl; struct se_node_acl *nacl = lacl->se_lun_nacl;
struct se_session *se_sess; struct se_session *se_sess;
struct se_portal_group *tpg; struct se_portal_group *tpg;
...@@ -1513,28 +1322,25 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port_ident( ...@@ -1513,28 +1322,25 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port_ident(
spin_unlock_irq(&nacl->nacl_sess_lock); spin_unlock_irq(&nacl->nacl_sess_lock);
return ret; return ret;
} }
DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(port_ident);
CONFIGFS_EATTR_OPS(target_stat_scsi_att_intr_port, se_ml_stat_grps, CONFIGFS_ATTR_RO(target_stat_iport_, inst);
scsi_att_intr_port_group); CONFIGFS_ATTR_RO(target_stat_iport_, dev);
CONFIGFS_ATTR_RO(target_stat_iport_, port);
CONFIGFS_ATTR_RO(target_stat_iport_, indx);
CONFIGFS_ATTR_RO(target_stat_iport_, port_auth_indx);
CONFIGFS_ATTR_RO(target_stat_iport_, port_ident);
static struct configfs_attribute *target_stat_scsi_ath_intr_port_attrs[] = { static struct configfs_attribute *target_stat_scsi_ath_intr_port_attrs[] = {
&target_stat_scsi_att_intr_port_inst.attr, &target_stat_iport_attr_inst,
&target_stat_scsi_att_intr_port_dev.attr, &target_stat_iport_attr_dev,
&target_stat_scsi_att_intr_port_port.attr, &target_stat_iport_attr_port,
&target_stat_scsi_att_intr_port_indx.attr, &target_stat_iport_attr_indx,
&target_stat_scsi_att_intr_port_port_auth_indx.attr, &target_stat_iport_attr_port_auth_indx,
&target_stat_scsi_att_intr_port_port_ident.attr, &target_stat_iport_attr_port_ident,
NULL, NULL,
}; };
static struct configfs_item_operations target_stat_scsi_att_intr_port_attrib_ops = {
.show_attribute = target_stat_scsi_att_intr_port_attr_show,
.store_attribute = target_stat_scsi_att_intr_port_attr_store,
};
static struct config_item_type target_stat_scsi_att_intr_port_cit = { static struct config_item_type target_stat_scsi_att_intr_port_cit = {
.ct_item_ops = &target_stat_scsi_att_intr_port_attrib_ops,
.ct_attrs = target_stat_scsi_ath_intr_port_attrs, .ct_attrs = target_stat_scsi_ath_intr_port_attrs,
.ct_owner = THIS_MODULE, .ct_owner = THIS_MODULE,
}; };
......
...@@ -36,7 +36,6 @@ ...@@ -36,7 +36,6 @@
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/configfs_macros.h>
#include "tcm_fc.h" #include "tcm_fc.h"
......
...@@ -38,8 +38,6 @@ ...@@ -38,8 +38,6 @@
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/target_core_fabric_configfs.h>
#include <target/configfs_macros.h>
#include "tcm_fc.h" #include "tcm_fc.h"
...@@ -131,55 +129,51 @@ static ssize_t ft_wwn_store(void *arg, const char *buf, size_t len) ...@@ -131,55 +129,51 @@ static ssize_t ft_wwn_store(void *arg, const char *buf, size_t len)
* ACL auth ops. * ACL auth ops.
*/ */
static ssize_t ft_nacl_show_port_name( static ssize_t ft_nacl_port_name_show(struct config_item *item, char *page)
struct se_node_acl *se_nacl,
char *page)
{ {
struct se_node_acl *se_nacl = acl_to_nacl(item);
struct ft_node_acl *acl = container_of(se_nacl, struct ft_node_acl *acl = container_of(se_nacl,
struct ft_node_acl, se_node_acl); struct ft_node_acl, se_node_acl);
return ft_wwn_show(&acl->node_auth.port_name, page); return ft_wwn_show(&acl->node_auth.port_name, page);
} }
static ssize_t ft_nacl_store_port_name( static ssize_t ft_nacl_port_name_store(struct config_item *item,
struct se_node_acl *se_nacl, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_node_acl *se_nacl = acl_to_nacl(item);
struct ft_node_acl *acl = container_of(se_nacl, struct ft_node_acl *acl = container_of(se_nacl,
struct ft_node_acl, se_node_acl); struct ft_node_acl, se_node_acl);
return ft_wwn_store(&acl->node_auth.port_name, page, count); return ft_wwn_store(&acl->node_auth.port_name, page, count);
} }
TF_NACL_BASE_ATTR(ft, port_name, S_IRUGO | S_IWUSR); static ssize_t ft_nacl_node_name_show(struct config_item *item,
char *page)
static ssize_t ft_nacl_show_node_name(
struct se_node_acl *se_nacl,
char *page)
{ {
struct se_node_acl *se_nacl = acl_to_nacl(item);
struct ft_node_acl *acl = container_of(se_nacl, struct ft_node_acl *acl = container_of(se_nacl,
struct ft_node_acl, se_node_acl); struct ft_node_acl, se_node_acl);
return ft_wwn_show(&acl->node_auth.node_name, page); return ft_wwn_show(&acl->node_auth.node_name, page);
} }
static ssize_t ft_nacl_store_node_name( static ssize_t ft_nacl_node_name_store(struct config_item *item,
struct se_node_acl *se_nacl, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_node_acl *se_nacl = acl_to_nacl(item);
struct ft_node_acl *acl = container_of(se_nacl, struct ft_node_acl *acl = container_of(se_nacl,
struct ft_node_acl, se_node_acl); struct ft_node_acl, se_node_acl);
return ft_wwn_store(&acl->node_auth.node_name, page, count); return ft_wwn_store(&acl->node_auth.node_name, page, count);
} }
TF_NACL_BASE_ATTR(ft, node_name, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(ft_nacl_, node_name);
CONFIGFS_ATTR(ft_nacl_, port_name);
static struct configfs_attribute *ft_nacl_base_attrs[] = { static struct configfs_attribute *ft_nacl_base_attrs[] = {
&ft_nacl_port_name.attr, &ft_nacl_attr_port_name,
&ft_nacl_node_name.attr, &ft_nacl_attr_node_name,
NULL, NULL,
}; };
...@@ -386,18 +380,16 @@ static void ft_del_wwn(struct se_wwn *wwn) ...@@ -386,18 +380,16 @@ static void ft_del_wwn(struct se_wwn *wwn)
kfree(ft_wwn); kfree(ft_wwn);
} }
static ssize_t ft_wwn_show_attr_version( static ssize_t ft_wwn_version_show(struct config_item *item, char *page)
struct target_fabric_configfs *tf,
char *page)
{ {
return sprintf(page, "TCM FC " FT_VERSION " on %s/%s on " return sprintf(page, "TCM FC " FT_VERSION " on %s/%s on "
""UTS_RELEASE"\n", utsname()->sysname, utsname()->machine); ""UTS_RELEASE"\n", utsname()->sysname, utsname()->machine);
} }
TF_WWN_ATTR_RO(ft, version); CONFIGFS_ATTR_RO(ft_wwn_, version);
static struct configfs_attribute *ft_wwn_attrs[] = { static struct configfs_attribute *ft_wwn_attrs[] = {
&ft_wwn_version.attr, &ft_wwn_attr_version,
NULL, NULL,
}; };
......
...@@ -44,7 +44,6 @@ ...@@ -44,7 +44,6 @@
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/configfs_macros.h>
#include "tcm_fc.h" #include "tcm_fc.h"
......
...@@ -36,7 +36,6 @@ ...@@ -36,7 +36,6 @@
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/configfs_macros.h>
#include "tcm_fc.h" #include "tcm_fc.h"
......
...@@ -19,8 +19,6 @@ ...@@ -19,8 +19,6 @@
#include <scsi/scsi_tcq.h> #include <scsi/scsi_tcq.h>
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/target_core_fabric_configfs.h>
#include <target/configfs_macros.h>
#include <asm/unaligned.h> #include <asm/unaligned.h>
#include "tcm_usb_gadget.h" #include "tcm_usb_gadget.h"
...@@ -1467,23 +1465,21 @@ static void usbg_drop_tport(struct se_wwn *wwn) ...@@ -1467,23 +1465,21 @@ static void usbg_drop_tport(struct se_wwn *wwn)
/* /*
* If somebody feels like dropping the version property, go ahead. * If somebody feels like dropping the version property, go ahead.
*/ */
static ssize_t usbg_wwn_show_attr_version( static ssize_t usbg_wwn_version_show(struct config_item *item, char *page)
struct target_fabric_configfs *tf,
char *page)
{ {
return sprintf(page, "usb-gadget fabric module\n"); return sprintf(page, "usb-gadget fabric module\n");
} }
TF_WWN_ATTR_RO(usbg, version);
CONFIGFS_ATTR_RO(usbg_wwn_, version);
static struct configfs_attribute *usbg_wwn_attrs[] = { static struct configfs_attribute *usbg_wwn_attrs[] = {
&usbg_wwn_version.attr, &usbg_wwn_attr_version,
NULL, NULL,
}; };
static ssize_t tcm_usbg_tpg_show_enable( static ssize_t tcm_usbg_tpg_enable_show(struct config_item *item, char *page)
struct se_portal_group *se_tpg,
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg); struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
return snprintf(page, PAGE_SIZE, "%u\n", tpg->gadget_connect); return snprintf(page, PAGE_SIZE, "%u\n", tpg->gadget_connect);
...@@ -1492,11 +1488,10 @@ static ssize_t tcm_usbg_tpg_show_enable( ...@@ -1492,11 +1488,10 @@ static ssize_t tcm_usbg_tpg_show_enable(
static int usbg_attach(struct usbg_tpg *); static int usbg_attach(struct usbg_tpg *);
static void usbg_detach(struct usbg_tpg *); static void usbg_detach(struct usbg_tpg *);
static ssize_t tcm_usbg_tpg_store_enable( static ssize_t tcm_usbg_tpg_enable_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg); struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
unsigned long op; unsigned long op;
ssize_t ret; ssize_t ret;
...@@ -1523,12 +1518,10 @@ static ssize_t tcm_usbg_tpg_store_enable( ...@@ -1523,12 +1518,10 @@ static ssize_t tcm_usbg_tpg_store_enable(
out: out:
return count; return count;
} }
TF_TPG_BASE_ATTR(tcm_usbg, enable, S_IRUGO | S_IWUSR);
static ssize_t tcm_usbg_tpg_show_nexus( static ssize_t tcm_usbg_tpg_nexus_show(struct config_item *item, char *page)
struct se_portal_group *se_tpg,
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg); struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
struct tcm_usbg_nexus *tv_nexus; struct tcm_usbg_nexus *tv_nexus;
ssize_t ret; ssize_t ret;
...@@ -1636,11 +1629,10 @@ static int tcm_usbg_drop_nexus(struct usbg_tpg *tpg) ...@@ -1636,11 +1629,10 @@ static int tcm_usbg_drop_nexus(struct usbg_tpg *tpg)
return ret; return ret;
} }
static ssize_t tcm_usbg_tpg_store_nexus( static ssize_t tcm_usbg_tpg_nexus_store(struct config_item *item,
struct se_portal_group *se_tpg, const char *page, size_t count)
const char *page,
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg); struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
unsigned char i_port[USBG_NAMELEN], *ptr; unsigned char i_port[USBG_NAMELEN], *ptr;
int ret; int ret;
...@@ -1670,11 +1662,13 @@ static ssize_t tcm_usbg_tpg_store_nexus( ...@@ -1670,11 +1662,13 @@ static ssize_t tcm_usbg_tpg_store_nexus(
return ret; return ret;
return count; return count;
} }
TF_TPG_BASE_ATTR(tcm_usbg, nexus, S_IRUGO | S_IWUSR);
CONFIGFS_ATTR(tcm_usbg_tpg_, enable);
CONFIGFS_ATTR(tcm_usbg_tpg_, nexus);
static struct configfs_attribute *usbg_base_attrs[] = { static struct configfs_attribute *usbg_base_attrs[] = {
&tcm_usbg_tpg_enable.attr, &tcm_usbg_tpg_attr_enable,
&tcm_usbg_tpg_nexus.attr, &tcm_usbg_tpg_attr_nexus,
NULL, NULL,
}; };
......
...@@ -42,8 +42,6 @@ ...@@ -42,8 +42,6 @@
#include <scsi/scsi_proto.h> #include <scsi/scsi_proto.h>
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/target_core_fabric_configfs.h>
#include <target/configfs_macros.h>
#include <linux/vhost.h> #include <linux/vhost.h>
#include <linux/virtio_scsi.h> #include <linux/virtio_scsi.h>
#include <linux/llist.h> #include <linux/llist.h>
...@@ -1686,11 +1684,10 @@ static void vhost_scsi_free_cmd_map_res(struct vhost_scsi_nexus *nexus, ...@@ -1686,11 +1684,10 @@ static void vhost_scsi_free_cmd_map_res(struct vhost_scsi_nexus *nexus,
} }
} }
static ssize_t vhost_scsi_tpg_attrib_store_fabric_prot_type( static ssize_t vhost_scsi_tpg_attrib_fabric_prot_type_store(
struct se_portal_group *se_tpg, 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 vhost_scsi_tpg *tpg = container_of(se_tpg, struct vhost_scsi_tpg *tpg = container_of(se_tpg,
struct vhost_scsi_tpg, se_tpg); struct vhost_scsi_tpg, se_tpg);
unsigned long val; unsigned long val;
...@@ -1709,19 +1706,20 @@ static ssize_t vhost_scsi_tpg_attrib_store_fabric_prot_type( ...@@ -1709,19 +1706,20 @@ static ssize_t vhost_scsi_tpg_attrib_store_fabric_prot_type(
return count; return count;
} }
static ssize_t vhost_scsi_tpg_attrib_show_fabric_prot_type( static ssize_t vhost_scsi_tpg_attrib_fabric_prot_type_show(
struct se_portal_group *se_tpg, struct config_item *item, char *page)
char *page)
{ {
struct se_portal_group *se_tpg = attrib_to_tpg(item);
struct vhost_scsi_tpg *tpg = container_of(se_tpg, struct vhost_scsi_tpg *tpg = container_of(se_tpg,
struct vhost_scsi_tpg, se_tpg); struct vhost_scsi_tpg, se_tpg);
return sprintf(page, "%d\n", tpg->tv_fabric_prot_type); return sprintf(page, "%d\n", tpg->tv_fabric_prot_type);
} }
TF_TPG_ATTRIB_ATTR(vhost_scsi, fabric_prot_type, S_IRUGO | S_IWUSR);
CONFIGFS_ATTR(vhost_scsi_tpg_attrib_, fabric_prot_type);
static struct configfs_attribute *vhost_scsi_tpg_attrib_attrs[] = { static struct configfs_attribute *vhost_scsi_tpg_attrib_attrs[] = {
&vhost_scsi_tpg_attrib_fabric_prot_type.attr, &vhost_scsi_tpg_attrib_attr_fabric_prot_type,
NULL, NULL,
}; };
...@@ -1869,9 +1867,9 @@ static int vhost_scsi_drop_nexus(struct vhost_scsi_tpg *tpg) ...@@ -1869,9 +1867,9 @@ static int vhost_scsi_drop_nexus(struct vhost_scsi_tpg *tpg)
return 0; return 0;
} }
static ssize_t vhost_scsi_tpg_show_nexus(struct se_portal_group *se_tpg, static ssize_t vhost_scsi_tpg_nexus_show(struct config_item *item, char *page)
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct vhost_scsi_tpg *tpg = container_of(se_tpg, struct vhost_scsi_tpg *tpg = container_of(se_tpg,
struct vhost_scsi_tpg, se_tpg); struct vhost_scsi_tpg, se_tpg);
struct vhost_scsi_nexus *tv_nexus; struct vhost_scsi_nexus *tv_nexus;
...@@ -1890,10 +1888,10 @@ static ssize_t vhost_scsi_tpg_show_nexus(struct se_portal_group *se_tpg, ...@@ -1890,10 +1888,10 @@ static ssize_t vhost_scsi_tpg_show_nexus(struct se_portal_group *se_tpg,
return ret; return ret;
} }
static ssize_t vhost_scsi_tpg_store_nexus(struct se_portal_group *se_tpg, static ssize_t vhost_scsi_tpg_nexus_store(struct config_item *item,
const char *page, const char *page, size_t count)
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct vhost_scsi_tpg *tpg = container_of(se_tpg, struct vhost_scsi_tpg *tpg = container_of(se_tpg,
struct vhost_scsi_tpg, se_tpg); struct vhost_scsi_tpg, se_tpg);
struct vhost_scsi_tport *tport_wwn = tpg->tport; struct vhost_scsi_tport *tport_wwn = tpg->tport;
...@@ -1968,10 +1966,10 @@ static ssize_t vhost_scsi_tpg_store_nexus(struct se_portal_group *se_tpg, ...@@ -1968,10 +1966,10 @@ static ssize_t vhost_scsi_tpg_store_nexus(struct se_portal_group *se_tpg,
return count; return count;
} }
TF_TPG_BASE_ATTR(vhost_scsi, nexus, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(vhost_scsi_tpg_, nexus);
static struct configfs_attribute *vhost_scsi_tpg_attrs[] = { static struct configfs_attribute *vhost_scsi_tpg_attrs[] = {
&vhost_scsi_tpg_nexus.attr, &vhost_scsi_tpg_attr_nexus,
NULL, NULL,
}; };
...@@ -2107,18 +2105,17 @@ static void vhost_scsi_drop_tport(struct se_wwn *wwn) ...@@ -2107,18 +2105,17 @@ static void vhost_scsi_drop_tport(struct se_wwn *wwn)
} }
static ssize_t static ssize_t
vhost_scsi_wwn_show_attr_version(struct target_fabric_configfs *tf, vhost_scsi_wwn_version_show(struct config_item *item, char *page)
char *page)
{ {
return sprintf(page, "TCM_VHOST fabric module %s on %s/%s" return sprintf(page, "TCM_VHOST fabric module %s on %s/%s"
"on "UTS_RELEASE"\n", VHOST_SCSI_VERSION, utsname()->sysname, "on "UTS_RELEASE"\n", VHOST_SCSI_VERSION, utsname()->sysname,
utsname()->machine); utsname()->machine);
} }
TF_WWN_ATTR_RO(vhost_scsi, version); CONFIGFS_ATTR_RO(vhost_scsi_wwn_, version);
static struct configfs_attribute *vhost_scsi_wwn_attrs[] = { static struct configfs_attribute *vhost_scsi_wwn_attrs[] = {
&vhost_scsi_wwn_version.attr, &vhost_scsi_wwn_attr_version,
NULL, NULL,
}; };
......
...@@ -53,7 +53,6 @@ ...@@ -53,7 +53,6 @@
#include <target/target_core_base.h> #include <target/target_core_base.h>
#include <target/target_core_fabric.h> #include <target/target_core_fabric.h>
#include <target/target_core_fabric_configfs.h>
#include <asm/hypervisor.h> #include <asm/hypervisor.h>
...@@ -1438,9 +1437,10 @@ static void scsiback_aborted_task(struct se_cmd *se_cmd) ...@@ -1438,9 +1437,10 @@ static void scsiback_aborted_task(struct se_cmd *se_cmd)
{ {
} }
static ssize_t scsiback_tpg_param_show_alias(struct se_portal_group *se_tpg, static ssize_t scsiback_tpg_param_alias_show(struct config_item *item,
char *page) char *page)
{ {
struct se_portal_group *se_tpg = param_to_tpg(item);
struct scsiback_tpg *tpg = container_of(se_tpg, struct scsiback_tpg, struct scsiback_tpg *tpg = container_of(se_tpg, struct scsiback_tpg,
se_tpg); se_tpg);
ssize_t rb; ssize_t rb;
...@@ -1452,9 +1452,10 @@ static ssize_t scsiback_tpg_param_show_alias(struct se_portal_group *se_tpg, ...@@ -1452,9 +1452,10 @@ static ssize_t scsiback_tpg_param_show_alias(struct se_portal_group *se_tpg,
return rb; return rb;
} }
static ssize_t scsiback_tpg_param_store_alias(struct se_portal_group *se_tpg, static ssize_t scsiback_tpg_param_alias_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 scsiback_tpg *tpg = container_of(se_tpg, struct scsiback_tpg, struct scsiback_tpg *tpg = container_of(se_tpg, struct scsiback_tpg,
se_tpg); se_tpg);
int len; int len;
...@@ -1474,10 +1475,10 @@ static ssize_t scsiback_tpg_param_store_alias(struct se_portal_group *se_tpg, ...@@ -1474,10 +1475,10 @@ static ssize_t scsiback_tpg_param_store_alias(struct se_portal_group *se_tpg,
return count; return count;
} }
TF_TPG_PARAM_ATTR(scsiback, alias, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(scsiback_tpg_param_, alias);
static struct configfs_attribute *scsiback_param_attrs[] = { static struct configfs_attribute *scsiback_param_attrs[] = {
&scsiback_tpg_param_alias.attr, &scsiback_tpg_param_attr_alias,
NULL, NULL,
}; };
...@@ -1585,9 +1586,9 @@ static int scsiback_drop_nexus(struct scsiback_tpg *tpg) ...@@ -1585,9 +1586,9 @@ static int scsiback_drop_nexus(struct scsiback_tpg *tpg)
return 0; return 0;
} }
static ssize_t scsiback_tpg_show_nexus(struct se_portal_group *se_tpg, static ssize_t scsiback_tpg_nexus_show(struct config_item *item, char *page)
char *page)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct scsiback_tpg *tpg = container_of(se_tpg, struct scsiback_tpg *tpg = container_of(se_tpg,
struct scsiback_tpg, se_tpg); struct scsiback_tpg, se_tpg);
struct scsiback_nexus *tv_nexus; struct scsiback_nexus *tv_nexus;
...@@ -1606,10 +1607,10 @@ static ssize_t scsiback_tpg_show_nexus(struct se_portal_group *se_tpg, ...@@ -1606,10 +1607,10 @@ static ssize_t scsiback_tpg_show_nexus(struct se_portal_group *se_tpg,
return ret; return ret;
} }
static ssize_t scsiback_tpg_store_nexus(struct se_portal_group *se_tpg, static ssize_t scsiback_tpg_nexus_store(struct config_item *item,
const char *page, const char *page, size_t count)
size_t count)
{ {
struct se_portal_group *se_tpg = to_tpg(item);
struct scsiback_tpg *tpg = container_of(se_tpg, struct scsiback_tpg *tpg = container_of(se_tpg,
struct scsiback_tpg, se_tpg); struct scsiback_tpg, se_tpg);
struct scsiback_tport *tport_wwn = tpg->tport; struct scsiback_tport *tport_wwn = tpg->tport;
...@@ -1681,26 +1682,25 @@ static ssize_t scsiback_tpg_store_nexus(struct se_portal_group *se_tpg, ...@@ -1681,26 +1682,25 @@ static ssize_t scsiback_tpg_store_nexus(struct se_portal_group *se_tpg,
return count; return count;
} }
TF_TPG_BASE_ATTR(scsiback, nexus, S_IRUGO | S_IWUSR); CONFIGFS_ATTR(scsiback_tpg_, nexus);
static struct configfs_attribute *scsiback_tpg_attrs[] = { static struct configfs_attribute *scsiback_tpg_attrs[] = {
&scsiback_tpg_nexus.attr, &scsiback_tpg_attr_nexus,
NULL, NULL,
}; };
static ssize_t static ssize_t
scsiback_wwn_show_attr_version(struct target_fabric_configfs *tf, scsiback_wwn_version_show(struct config_item *item, char *page)
char *page)
{ {
return sprintf(page, "xen-pvscsi fabric module %s on %s/%s on " return sprintf(page, "xen-pvscsi fabric module %s on %s/%s on "
UTS_RELEASE"\n", UTS_RELEASE"\n",
VSCSI_VERSION, utsname()->sysname, utsname()->machine); VSCSI_VERSION, utsname()->sysname, utsname()->machine);
} }
TF_WWN_ATTR_RO(scsiback, version); CONFIGFS_ATTR_RO(scsiback_wwn_, version);
static struct configfs_attribute *scsiback_wwn_attrs[] = { static struct configfs_attribute *scsiback_wwn_attrs[] = {
&scsiback_wwn_version.attr, &scsiback_wwn_attr_version,
NULL, NULL,
}; };
......
/* -*- mode: c; c-basic-offset: 8; -*-
* vim: noexpandtab sw=8 ts=8 sts=0:
*
* configfs_macros.h - extends macros for configfs
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 021110-1307, USA.
*
* Based on sysfs:
* sysfs is Copyright (C) 2001, 2002, 2003 Patrick Mochel
*
* Based on kobject.h:
* Copyright (c) 2002-2003 Patrick Mochel
* Copyright (c) 2002-2003 Open Source Development Labs
*
* configfs Copyright (C) 2005 Oracle. All rights reserved.
*
* Added CONFIGFS_EATTR() macros from original configfs.h macros
* Copright (C) 2008-2009 Nicholas A. Bellinger <nab@linux-iscsi.org>
*
* Please read Documentation/filesystems/configfs/configfs.txt before using
* the configfs interface, ESPECIALLY the parts about reference counts and
* item destructors.
*/
#ifndef _CONFIGFS_MACROS_H_
#define _CONFIGFS_MACROS_H_
#include <linux/configfs.h>
/*
* Users often need to create attribute structures for their configurable
* attributes, containing a configfs_attribute member and function pointers
* for the show() and store() operations on that attribute. If they don't
* need anything else on the extended attribute structure, they can use
* this macro to define it. The argument _name isends up as
* 'struct _name_attribute, as well as names of to CONFIGFS_ATTR_OPS() below.
* The argument _item is the name of the structure containing the
* struct config_item or struct config_group structure members
*/
#define CONFIGFS_EATTR_STRUCT(_name, _item) \
struct _name##_attribute { \
struct configfs_attribute attr; \
ssize_t (*show)(struct _item *, char *); \
ssize_t (*store)(struct _item *, const char *, size_t); \
}
/*
* With the extended attribute structure, users can use this macro
* (similar to sysfs' __ATTR) to make defining attributes easier.
* An example:
* #define MYITEM_EATTR(_name, _mode, _show, _store) \
* struct myitem_attribute childless_attr_##_name = \
* __CONFIGFS_EATTR(_name, _mode, _show, _store)
*/
#define __CONFIGFS_EATTR(_name, _mode, _show, _store) \
{ \
.attr = { \
.ca_name = __stringify(_name), \
.ca_mode = _mode, \
.ca_owner = THIS_MODULE, \
}, \
.show = _show, \
.store = _store, \
}
/* Here is a readonly version, only requiring a show() operation */
#define __CONFIGFS_EATTR_RO(_name, _show) \
{ \
.attr = { \
.ca_name = __stringify(_name), \
.ca_mode = 0444, \
.ca_owner = THIS_MODULE, \
}, \
.show = _show, \
}
/*
* With these extended attributes, the simple show_attribute() and
* store_attribute() operations need to call the show() and store() of the
* attributes. This is a common pattern, so we provide a macro to define
* them. The argument _name is the name of the attribute defined by
* CONFIGFS_ATTR_STRUCT(). The argument _item is the name of the structure
* containing the struct config_item or struct config_group structure member.
* The argument _item_member is the actual name of the struct config_* struct
* in your _item structure. Meaning my_structure->some_config_group.
* ^^_item^^^^^ ^^_item_member^^^
* This macro expects the attributes to be named "struct <name>_attribute".
*/
#define CONFIGFS_EATTR_OPS_TO_FUNC(_name, _item, _item_member) \
static struct _item *to_##_name(struct config_item *ci) \
{ \
return (ci) ? container_of(to_config_group(ci), struct _item, \
_item_member) : NULL; \
}
#define CONFIGFS_EATTR_OPS_SHOW(_name, _item) \
static ssize_t _name##_attr_show(struct config_item *item, \
struct configfs_attribute *attr, \
char *page) \
{ \
struct _item *_item = to_##_name(item); \
struct _name##_attribute * _name##_attr = \
container_of(attr, struct _name##_attribute, attr); \
ssize_t ret = 0; \
\
if (_name##_attr->show) \
ret = _name##_attr->show(_item, page); \
return ret; \
}
#define CONFIGFS_EATTR_OPS_STORE(_name, _item) \
static ssize_t _name##_attr_store(struct config_item *item, \
struct configfs_attribute *attr, \
const char *page, size_t count) \
{ \
struct _item *_item = to_##_name(item); \
struct _name##_attribute * _name##_attr = \
container_of(attr, struct _name##_attribute, attr); \
ssize_t ret = -EINVAL; \
\
if (_name##_attr->store) \
ret = _name##_attr->store(_item, page, count); \
return ret; \
}
#define CONFIGFS_EATTR_OPS(_name, _item, _item_member) \
CONFIGFS_EATTR_OPS_TO_FUNC(_name, _item, _item_member); \
CONFIGFS_EATTR_OPS_SHOW(_name, _item); \
CONFIGFS_EATTR_OPS_STORE(_name, _item);
#define CONFIGFS_EATTR_OPS_RO(_name, _item, _item_member) \
CONFIGFS_EATTR_OPS_TO_FUNC(_name, _item, _item_member); \
CONFIGFS_EATTR_OPS_SHOW(_name, _item);
#endif /* _CONFIGFS_MACROS_H_ */
...@@ -563,6 +563,36 @@ struct se_node_acl { ...@@ -563,6 +563,36 @@ struct se_node_acl {
struct kref acl_kref; struct kref acl_kref;
}; };
static inline struct se_node_acl *acl_to_nacl(struct config_item *item)
{
return container_of(to_config_group(item), struct se_node_acl,
acl_group);
}
static inline struct se_node_acl *attrib_to_nacl(struct config_item *item)
{
return container_of(to_config_group(item), struct se_node_acl,
acl_attrib_group);
}
static inline struct se_node_acl *auth_to_nacl(struct config_item *item)
{
return container_of(to_config_group(item), struct se_node_acl,
acl_auth_group);
}
static inline struct se_node_acl *param_to_nacl(struct config_item *item)
{
return container_of(to_config_group(item), struct se_node_acl,
acl_param_group);
}
static inline struct se_node_acl *fabric_stat_to_nacl(struct config_item *item)
{
return container_of(to_config_group(item), struct se_node_acl,
acl_fabric_stat_group);
}
struct se_session { struct se_session {
unsigned sess_tearing_down:1; unsigned sess_tearing_down:1;
u64 sess_bin_isid; u64 sess_bin_isid;
...@@ -820,6 +850,12 @@ struct se_tpg_np { ...@@ -820,6 +850,12 @@ struct se_tpg_np {
struct config_group tpg_np_group; struct config_group tpg_np_group;
}; };
static inline struct se_tpg_np *to_tpg_np(struct config_item *item)
{
return container_of(to_config_group(item), struct se_tpg_np,
tpg_np_group);
}
struct se_portal_group { struct se_portal_group {
/* /*
* PROTOCOL IDENTIFIER value per SPC4, 7.5.1. * PROTOCOL IDENTIFIER value per SPC4, 7.5.1.
...@@ -856,6 +892,30 @@ struct se_portal_group { ...@@ -856,6 +892,30 @@ struct se_portal_group {
struct config_group tpg_param_group; struct config_group tpg_param_group;
}; };
static inline struct se_portal_group *to_tpg(struct config_item *item)
{
return container_of(to_config_group(item), struct se_portal_group,
tpg_group);
}
static inline struct se_portal_group *attrib_to_tpg(struct config_item *item)
{
return container_of(to_config_group(item), struct se_portal_group,
tpg_attrib_group);
}
static inline struct se_portal_group *auth_to_tpg(struct config_item *item)
{
return container_of(to_config_group(item), struct se_portal_group,
tpg_auth_group);
}
static inline struct se_portal_group *param_to_tpg(struct config_item *item)
{
return container_of(to_config_group(item), struct se_portal_group,
tpg_param_group);
}
struct se_wwn { struct se_wwn {
struct target_fabric_configfs *wwn_tf; struct target_fabric_configfs *wwn_tf;
struct config_group wwn_group; struct config_group wwn_group;
......
/*
* Used for tfc_wwn_cit attributes
*/
#include <target/configfs_macros.h>
CONFIGFS_EATTR_STRUCT(target_fabric_nacl_attrib, se_node_acl);
#define TF_NACL_ATTRIB_ATTR(_fabric, _name, _mode) \
static struct target_fabric_nacl_attrib_attribute _fabric##_nacl_attrib_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
_fabric##_nacl_attrib_show_##_name, \
_fabric##_nacl_attrib_store_##_name);
CONFIGFS_EATTR_STRUCT(target_fabric_nacl_auth, se_node_acl);
#define TF_NACL_AUTH_ATTR(_fabric, _name, _mode) \
static struct target_fabric_nacl_auth_attribute _fabric##_nacl_auth_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
_fabric##_nacl_auth_show_##_name, \
_fabric##_nacl_auth_store_##_name);
#define TF_NACL_AUTH_ATTR_RO(_fabric, _name) \
static struct target_fabric_nacl_auth_attribute _fabric##_nacl_auth_##_name = \
__CONFIGFS_EATTR_RO(_name, \
_fabric##_nacl_auth_show_##_name);
CONFIGFS_EATTR_STRUCT(target_fabric_nacl_param, se_node_acl);
#define TF_NACL_PARAM_ATTR(_fabric, _name, _mode) \
static struct target_fabric_nacl_param_attribute _fabric##_nacl_param_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
_fabric##_nacl_param_show_##_name, \
_fabric##_nacl_param_store_##_name);
#define TF_NACL_PARAM_ATTR_RO(_fabric, _name) \
static struct target_fabric_nacl_param_attribute _fabric##_nacl_param_##_name = \
__CONFIGFS_EATTR_RO(_name, \
_fabric##_nacl_param_show_##_name);
CONFIGFS_EATTR_STRUCT(target_fabric_nacl_base, se_node_acl);
#define TF_NACL_BASE_ATTR(_fabric, _name, _mode) \
static struct target_fabric_nacl_base_attribute _fabric##_nacl_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
_fabric##_nacl_show_##_name, \
_fabric##_nacl_store_##_name);
#define TF_NACL_BASE_ATTR_RO(_fabric, _name) \
static struct target_fabric_nacl_base_attribute _fabric##_nacl_##_name = \
__CONFIGFS_EATTR_RO(_name, \
_fabric##_nacl_show_##_name);
CONFIGFS_EATTR_STRUCT(target_fabric_np_base, se_tpg_np);
#define TF_NP_BASE_ATTR(_fabric, _name, _mode) \
static struct target_fabric_np_base_attribute _fabric##_np_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
_fabric##_np_show_##_name, \
_fabric##_np_store_##_name);
CONFIGFS_EATTR_STRUCT(target_fabric_tpg_attrib, se_portal_group);
#define TF_TPG_ATTRIB_ATTR(_fabric, _name, _mode) \
static struct target_fabric_tpg_attrib_attribute _fabric##_tpg_attrib_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
_fabric##_tpg_attrib_show_##_name, \
_fabric##_tpg_attrib_store_##_name);
CONFIGFS_EATTR_STRUCT(target_fabric_tpg_auth, se_portal_group);
#define TF_TPG_AUTH_ATTR(_fabric, _name, _mode) \
static struct target_fabric_tpg_auth_attribute _fabric##_tpg_auth_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
_fabric##_tpg_auth_show_##_name, \
_fabric##_tpg_auth_store_##_name);
#define TF_TPG_AUTH_ATTR_RO(_fabric, _name) \
static struct target_fabric_tpg_auth_attribute _fabric##_tpg_auth_##_name = \
__CONFIGFS_EATTR_RO(_name, \
_fabric##_tpg_auth_show_##_name);
CONFIGFS_EATTR_STRUCT(target_fabric_tpg_param, se_portal_group);
#define TF_TPG_PARAM_ATTR(_fabric, _name, _mode) \
static struct target_fabric_tpg_param_attribute _fabric##_tpg_param_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
_fabric##_tpg_param_show_##_name, \
_fabric##_tpg_param_store_##_name);
CONFIGFS_EATTR_STRUCT(target_fabric_tpg, se_portal_group);
#define TF_TPG_BASE_ATTR(_fabric, _name, _mode) \
static struct target_fabric_tpg_attribute _fabric##_tpg_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
_fabric##_tpg_show_##_name, \
_fabric##_tpg_store_##_name);
#define TF_TPG_BASE_ATTR_RO(_fabric, _name) \
static struct target_fabric_tpg_attribute _fabric##_tpg_##_name = \
__CONFIGFS_EATTR_RO(_name, \
_fabric##_tpg_show_##_name);
CONFIGFS_EATTR_STRUCT(target_fabric_wwn, target_fabric_configfs);
#define TF_WWN_ATTR(_fabric, _name, _mode) \
static struct target_fabric_wwn_attribute _fabric##_wwn_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
_fabric##_wwn_show_attr_##_name, \
_fabric##_wwn_store_attr_##_name);
#define TF_WWN_ATTR_RO(_fabric, _name) \
static struct target_fabric_wwn_attribute _fabric##_wwn_##_name = \
__CONFIGFS_EATTR_RO(_name, \
_fabric##_wwn_show_attr_##_name);
CONFIGFS_EATTR_STRUCT(target_fabric_discovery, target_fabric_configfs);
#define TF_DISC_ATTR(_fabric, _name, _mode) \
static struct target_fabric_discovery_attribute _fabric##_disc_##_name = \
__CONFIGFS_EATTR(_name, _mode, \
_fabric##_disc_show_##_name, \
_fabric##_disc_store_##_name);
#define TF_DISC_ATTR_RO(_fabric, _name) \
static struct target_fabric_discovery_attribute _fabric##_disc_##_name = \
__CONFIGFS_EATTR_RO(_name, \
_fabric##_disc_show_##_name);
extern int target_fabric_setup_cits(struct target_fabric_configfs *);
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