aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xDocumentation/target/tcm_mod_builder.py17
-rw-r--r--drivers/infiniband/ulp/srpt/ib_srpt.c78
-rw-r--r--drivers/scsi/qla2xxx/tcm_qla2xxx.c153
-rw-r--r--drivers/target/iscsi/iscsi_target_configfs.c791
-rw-r--r--drivers/target/iscsi/iscsi_target_stat.c666
-rw-r--r--drivers/target/loopback/tcm_loop.c60
-rw-r--r--drivers/target/sbp/sbp_target.c87
-rw-r--r--drivers/target/target_core_configfs.c1209
-rw-r--r--drivers/target/target_core_fabric_configfs.c275
-rw-r--r--drivers/target/target_core_internal.h3
-rw-r--r--drivers/target/target_core_stat.c918
-rw-r--r--drivers/target/tcm_fc/tfc_cmd.c1
-rw-r--r--drivers/target/tcm_fc/tfc_conf.c44
-rw-r--r--drivers/target/tcm_fc/tfc_io.c1
-rw-r--r--drivers/target/tcm_fc/tfc_sess.c1
-rw-r--r--drivers/usb/gadget/legacy/tcm_usb_gadget.c44
-rw-r--r--drivers/vhost/scsi.c41
-rw-r--r--drivers/xen/xen-scsiback.c32
-rw-r--r--include/target/configfs_macros.h147
-rw-r--r--include/target/target_core_base.h60
-rw-r--r--include/target/target_core_fabric_configfs.h122
21 files changed, 1689 insertions, 3061 deletions
diff --git a/Documentation/target/tcm_mod_builder.py b/Documentation/target/tcm_mod_builder.py
index cda56df9b8a7..7d370c9b1450 100755
--- a/Documentation/target/tcm_mod_builder.py
+++ b/Documentation/target/tcm_mod_builder.py
@@ -203,8 +203,6 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name):
203 buf += "#include <scsi/scsi_proto.h>\n\n" 203 buf += "#include <scsi/scsi_proto.h>\n\n"
204 buf += "#include <target/target_core_base.h>\n" 204 buf += "#include <target/target_core_base.h>\n"
205 buf += "#include <target/target_core_fabric.h>\n" 205 buf += "#include <target/target_core_fabric.h>\n"
206 buf += "#include <target/target_core_fabric_configfs.h>\n"
207 buf += "#include <target/configfs_macros.h>\n\n"
208 buf += "#include \"" + fabric_mod_name + "_base.h\"\n" 206 buf += "#include \"" + fabric_mod_name + "_base.h\"\n"
209 buf += "#include \"" + fabric_mod_name + "_fabric.h\"\n\n" 207 buf += "#include \"" + fabric_mod_name + "_fabric.h\"\n\n"
210 208
@@ -283,19 +281,6 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name):
283 buf += " struct " + fabric_mod_name + "_" + fabric_mod_port + ", " + fabric_mod_port + "_wwn);\n" 281 buf += " struct " + fabric_mod_name + "_" + fabric_mod_port + ", " + fabric_mod_port + "_wwn);\n"
284 buf += " kfree(" + fabric_mod_port + ");\n" 282 buf += " kfree(" + fabric_mod_port + ");\n"
285 buf += "}\n\n" 283 buf += "}\n\n"
286 buf += "static ssize_t " + fabric_mod_name + "_wwn_show_attr_version(\n"
287 buf += " struct target_fabric_configfs *tf,\n"
288 buf += " char *page)\n"
289 buf += "{\n"
290 buf += " return sprintf(page, \"" + fabric_mod_name.upper() + " fabric module %s on %s/%s\"\n"
291 buf += " \"on \"UTS_RELEASE\"\\n\", " + fabric_mod_name.upper() + "_VERSION, utsname()->sysname,\n"
292 buf += " utsname()->machine);\n"
293 buf += "}\n\n"
294 buf += "TF_WWN_ATTR_RO(" + fabric_mod_name + ", version);\n\n"
295 buf += "static struct configfs_attribute *" + fabric_mod_name + "_wwn_attrs[] = {\n"
296 buf += " &" + fabric_mod_name + "_wwn_version.attr,\n"
297 buf += " NULL,\n"
298 buf += "};\n\n"
299 284
300 buf += "static const struct target_core_fabric_ops " + fabric_mod_name + "_ops = {\n" 285 buf += "static const struct target_core_fabric_ops " + fabric_mod_name + "_ops = {\n"
301 buf += " .module = THIS_MODULE,\n" 286 buf += " .module = THIS_MODULE,\n"
@@ -328,8 +313,6 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name):
328 buf += " .fabric_drop_wwn = " + fabric_mod_name + "_drop_" + fabric_mod_port + ",\n" 313 buf += " .fabric_drop_wwn = " + fabric_mod_name + "_drop_" + fabric_mod_port + ",\n"
329 buf += " .fabric_make_tpg = " + fabric_mod_name + "_make_tpg,\n" 314 buf += " .fabric_make_tpg = " + fabric_mod_name + "_make_tpg,\n"
330 buf += " .fabric_drop_tpg = " + fabric_mod_name + "_drop_tpg,\n" 315 buf += " .fabric_drop_tpg = " + fabric_mod_name + "_drop_tpg,\n"
331 buf += "\n"
332 buf += " .tfc_wwn_attrs = " + fabric_mod_name + "_wwn_attrs,\n"
333 buf += "};\n\n" 316 buf += "};\n\n"
334 317
335 buf += "static int __init " + fabric_mod_name + "_init(void)\n" 318 buf += "static int __init " + fabric_mod_name + "_init(void)\n"
diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
index f6fe0414139b..231d29cc0419 100644
--- a/drivers/infiniband/ulp/srpt/ib_srpt.c
+++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
@@ -43,9 +43,7 @@
43#include <linux/atomic.h> 43#include <linux/atomic.h>
44#include <scsi/scsi_proto.h> 44#include <scsi/scsi_proto.h>
45#include <scsi/scsi_tcq.h> 45#include <scsi/scsi_tcq.h>
46#include <target/configfs_macros.h>
47#include <target/target_core_base.h> 46#include <target/target_core_base.h>
48#include <target/target_core_fabric_configfs.h>
49#include <target/target_core_fabric.h> 47#include <target/target_core_fabric.h>
50#include "ib_srpt.h" 48#include "ib_srpt.h"
51 49
@@ -3545,20 +3543,19 @@ static void srpt_cleanup_nodeacl(struct se_node_acl *se_nacl)
3545 spin_unlock_irq(&sport->port_acl_lock); 3543 spin_unlock_irq(&sport->port_acl_lock);
3546} 3544}
3547 3545
3548static ssize_t srpt_tpg_attrib_show_srp_max_rdma_size( 3546static ssize_t srpt_tpg_attrib_srp_max_rdma_size_show(struct config_item *item,
3549 struct se_portal_group *se_tpg, 3547 char *page)
3550 char *page)
3551{ 3548{
3549 struct se_portal_group *se_tpg = attrib_to_tpg(item);
3552 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); 3550 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
3553 3551
3554 return sprintf(page, "%u\n", sport->port_attrib.srp_max_rdma_size); 3552 return sprintf(page, "%u\n", sport->port_attrib.srp_max_rdma_size);
3555} 3553}
3556 3554
3557static ssize_t srpt_tpg_attrib_store_srp_max_rdma_size( 3555static ssize_t srpt_tpg_attrib_srp_max_rdma_size_store(struct config_item *item,
3558 struct se_portal_group *se_tpg, 3556 const char *page, size_t count)
3559 const char *page,
3560 size_t count)
3561{ 3557{
3558 struct se_portal_group *se_tpg = attrib_to_tpg(item);
3562 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); 3559 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
3563 unsigned long val; 3560 unsigned long val;
3564 int ret; 3561 int ret;
@@ -3583,22 +3580,19 @@ static ssize_t srpt_tpg_attrib_store_srp_max_rdma_size(
3583 return count; 3580 return count;
3584} 3581}
3585 3582
3586TF_TPG_ATTRIB_ATTR(srpt, srp_max_rdma_size, S_IRUGO | S_IWUSR); 3583static ssize_t srpt_tpg_attrib_srp_max_rsp_size_show(struct config_item *item,
3587 3584 char *page)
3588static ssize_t srpt_tpg_attrib_show_srp_max_rsp_size(
3589 struct se_portal_group *se_tpg,
3590 char *page)
3591{ 3585{
3586 struct se_portal_group *se_tpg = attrib_to_tpg(item);
3592 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); 3587 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
3593 3588
3594 return sprintf(page, "%u\n", sport->port_attrib.srp_max_rsp_size); 3589 return sprintf(page, "%u\n", sport->port_attrib.srp_max_rsp_size);
3595} 3590}
3596 3591
3597static ssize_t srpt_tpg_attrib_store_srp_max_rsp_size( 3592static ssize_t srpt_tpg_attrib_srp_max_rsp_size_store(struct config_item *item,
3598 struct se_portal_group *se_tpg, 3593 const char *page, size_t count)
3599 const char *page,
3600 size_t count)
3601{ 3594{
3595 struct se_portal_group *se_tpg = attrib_to_tpg(item);
3602 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); 3596 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
3603 unsigned long val; 3597 unsigned long val;
3604 int ret; 3598 int ret;
@@ -3623,22 +3617,19 @@ static ssize_t srpt_tpg_attrib_store_srp_max_rsp_size(
3623 return count; 3617 return count;
3624} 3618}
3625 3619
3626TF_TPG_ATTRIB_ATTR(srpt, srp_max_rsp_size, S_IRUGO | S_IWUSR); 3620static ssize_t srpt_tpg_attrib_srp_sq_size_show(struct config_item *item,
3627 3621 char *page)
3628static ssize_t srpt_tpg_attrib_show_srp_sq_size(
3629 struct se_portal_group *se_tpg,
3630 char *page)
3631{ 3622{
3623 struct se_portal_group *se_tpg = attrib_to_tpg(item);
3632 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); 3624 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
3633 3625
3634 return sprintf(page, "%u\n", sport->port_attrib.srp_sq_size); 3626 return sprintf(page, "%u\n", sport->port_attrib.srp_sq_size);
3635} 3627}
3636 3628
3637static ssize_t srpt_tpg_attrib_store_srp_sq_size( 3629static ssize_t srpt_tpg_attrib_srp_sq_size_store(struct config_item *item,
3638 struct se_portal_group *se_tpg, 3630 const char *page, size_t count)
3639 const char *page,
3640 size_t count)
3641{ 3631{
3632 struct se_portal_group *se_tpg = attrib_to_tpg(item);
3642 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); 3633 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
3643 unsigned long val; 3634 unsigned long val;
3644 int ret; 3635 int ret;
@@ -3663,29 +3654,29 @@ static ssize_t srpt_tpg_attrib_store_srp_sq_size(
3663 return count; 3654 return count;
3664} 3655}
3665 3656
3666TF_TPG_ATTRIB_ATTR(srpt, srp_sq_size, S_IRUGO | S_IWUSR); 3657CONFIGFS_ATTR(srpt_tpg_attrib_, srp_max_rdma_size);
3658CONFIGFS_ATTR(srpt_tpg_attrib_, srp_max_rsp_size);
3659CONFIGFS_ATTR(srpt_tpg_attrib_, srp_sq_size);
3667 3660
3668static struct configfs_attribute *srpt_tpg_attrib_attrs[] = { 3661static struct configfs_attribute *srpt_tpg_attrib_attrs[] = {
3669 &srpt_tpg_attrib_srp_max_rdma_size.attr, 3662 &srpt_tpg_attrib_attr_srp_max_rdma_size,
3670 &srpt_tpg_attrib_srp_max_rsp_size.attr, 3663 &srpt_tpg_attrib_attr_srp_max_rsp_size,
3671 &srpt_tpg_attrib_srp_sq_size.attr, 3664 &srpt_tpg_attrib_attr_srp_sq_size,
3672 NULL, 3665 NULL,
3673}; 3666};
3674 3667
3675static ssize_t srpt_tpg_show_enable( 3668static ssize_t srpt_tpg_enable_show(struct config_item *item, char *page)
3676 struct se_portal_group *se_tpg,
3677 char *page)
3678{ 3669{
3670 struct se_portal_group *se_tpg = to_tpg(item);
3679 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); 3671 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
3680 3672
3681 return snprintf(page, PAGE_SIZE, "%d\n", (sport->enabled) ? 1: 0); 3673 return snprintf(page, PAGE_SIZE, "%d\n", (sport->enabled) ? 1: 0);
3682} 3674}
3683 3675
3684static ssize_t srpt_tpg_store_enable( 3676static ssize_t srpt_tpg_enable_store(struct config_item *item,
3685 struct se_portal_group *se_tpg, 3677 const char *page, size_t count)
3686 const char *page,
3687 size_t count)
3688{ 3678{
3679 struct se_portal_group *se_tpg = to_tpg(item);
3689 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1); 3680 struct srpt_port *sport = container_of(se_tpg, struct srpt_port, port_tpg_1);
3690 unsigned long tmp; 3681 unsigned long tmp;
3691 int ret; 3682 int ret;
@@ -3708,10 +3699,10 @@ static ssize_t srpt_tpg_store_enable(
3708 return count; 3699 return count;
3709} 3700}
3710 3701
3711TF_TPG_BASE_ATTR(srpt, enable, S_IRUGO | S_IWUSR); 3702CONFIGFS_ATTR(srpt_tpg_, enable);
3712 3703
3713static struct configfs_attribute *srpt_tpg_attrs[] = { 3704static struct configfs_attribute *srpt_tpg_attrs[] = {
3714 &srpt_tpg_enable.attr, 3705 &srpt_tpg_attr_enable,
3715 NULL, 3706 NULL,
3716}; 3707};
3717 3708
@@ -3781,16 +3772,15 @@ static void srpt_drop_tport(struct se_wwn *wwn)
3781 pr_debug("drop_tport(%s\n", config_item_name(&sport->port_wwn.wwn_group.cg_item)); 3772 pr_debug("drop_tport(%s\n", config_item_name(&sport->port_wwn.wwn_group.cg_item));
3782} 3773}
3783 3774
3784static ssize_t srpt_wwn_show_attr_version(struct target_fabric_configfs *tf, 3775static ssize_t srpt_wwn_version_show(struct config_item *item, char *buf)
3785 char *buf)
3786{ 3776{
3787 return scnprintf(buf, PAGE_SIZE, "%s\n", DRV_VERSION); 3777 return scnprintf(buf, PAGE_SIZE, "%s\n", DRV_VERSION);
3788} 3778}
3789 3779
3790TF_WWN_ATTR_RO(srpt, version); 3780CONFIGFS_ATTR_RO(srpt_wwn_, version);
3791 3781
3792static struct configfs_attribute *srpt_wwn_attrs[] = { 3782static struct configfs_attribute *srpt_wwn_attrs[] = {
3793 &srpt_wwn_version.attr, 3783 &srpt_wwn_attr_version,
3794 NULL, 3784 NULL,
3795}; 3785};
3796 3786
diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
index ac65cb7b4886..3ba2e9564b9a 100644
--- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c
+++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c
@@ -43,8 +43,6 @@
43#include <scsi/scsi_cmnd.h> 43#include <scsi/scsi_cmnd.h>
44#include <target/target_core_base.h> 44#include <target/target_core_base.h>
45#include <target/target_core_fabric.h> 45#include <target/target_core_fabric.h>
46#include <target/target_core_fabric_configfs.h>
47#include <target/configfs_macros.h>
48 46
49#include "qla_def.h" 47#include "qla_def.h"
50#include "qla_target.h" 48#include "qla_target.h"
@@ -729,23 +727,23 @@ static int tcm_qla2xxx_init_nodeacl(struct se_node_acl *se_nacl,
729 727
730#define DEF_QLA_TPG_ATTRIB(name) \ 728#define DEF_QLA_TPG_ATTRIB(name) \
731 \ 729 \
732static ssize_t tcm_qla2xxx_tpg_attrib_show_##name( \ 730static ssize_t tcm_qla2xxx_tpg_attrib_##name##_show( \
733 struct se_portal_group *se_tpg, \ 731 struct config_item *item, char *page) \
734 char *page) \
735{ \ 732{ \
733 struct se_portal_group *se_tpg = attrib_to_tpg(item); \
736 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, \ 734 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, \
737 struct tcm_qla2xxx_tpg, se_tpg); \ 735 struct tcm_qla2xxx_tpg, se_tpg); \
738 \ 736 \
739 return sprintf(page, "%u\n", tpg->tpg_attrib.name); \ 737 return sprintf(page, "%u\n", tpg->tpg_attrib.name); \
740} \ 738} \
741 \ 739 \
742static ssize_t tcm_qla2xxx_tpg_attrib_store_##name( \ 740static ssize_t tcm_qla2xxx_tpg_attrib_##name##_store( \
743 struct se_portal_group *se_tpg, \ 741 struct config_item *item, const char *page, size_t count) \
744 const char *page, \
745 size_t count) \
746{ \ 742{ \
743 struct se_portal_group *se_tpg = attrib_to_tpg(item); \
747 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, \ 744 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, \
748 struct tcm_qla2xxx_tpg, se_tpg); \ 745 struct tcm_qla2xxx_tpg, se_tpg); \
746 struct tcm_qla2xxx_tpg_attrib *a = &tpg->tpg_attrib; \
749 unsigned long val; \ 747 unsigned long val; \
750 int ret; \ 748 int ret; \
751 \ 749 \
@@ -755,81 +753,39 @@ static ssize_t tcm_qla2xxx_tpg_attrib_store_##name( \
755 " ret: %d\n", ret); \ 753 " ret: %d\n", ret); \
756 return -EINVAL; \ 754 return -EINVAL; \
757 } \ 755 } \
758 ret = tcm_qla2xxx_set_attrib_##name(tpg, val); \
759 \
760 return (!ret) ? count : -EINVAL; \
761}
762
763#define DEF_QLA_TPG_ATTR_BOOL(_name) \
764 \
765static int tcm_qla2xxx_set_attrib_##_name( \
766 struct tcm_qla2xxx_tpg *tpg, \
767 unsigned long val) \
768{ \
769 struct tcm_qla2xxx_tpg_attrib *a = &tpg->tpg_attrib; \
770 \ 756 \
771 if ((val != 0) && (val != 1)) { \ 757 if ((val != 0) && (val != 1)) { \
772 pr_err("Illegal boolean value %lu\n", val); \ 758 pr_err("Illegal boolean value %lu\n", val); \
773 return -EINVAL; \ 759 return -EINVAL; \
774 } \ 760 } \
775 \ 761 \
776 a->_name = val; \ 762 a->name = val; \
777 return 0; \ 763 \
778} 764 return count; \
779 765} \
780#define QLA_TPG_ATTR(_name, _mode) \ 766CONFIGFS_ATTR(tcm_qla2xxx_tpg_attrib_, name)
781 TF_TPG_ATTRIB_ATTR(tcm_qla2xxx, _name, _mode);
782 767
783/*
784 * Define tcm_qla2xxx_tpg_attrib_s_generate_node_acls
785 */
786DEF_QLA_TPG_ATTR_BOOL(generate_node_acls);
787DEF_QLA_TPG_ATTRIB(generate_node_acls); 768DEF_QLA_TPG_ATTRIB(generate_node_acls);
788QLA_TPG_ATTR(generate_node_acls, S_IRUGO | S_IWUSR);
789
790/*
791 Define tcm_qla2xxx_attrib_s_cache_dynamic_acls
792 */
793DEF_QLA_TPG_ATTR_BOOL(cache_dynamic_acls);
794DEF_QLA_TPG_ATTRIB(cache_dynamic_acls); 769DEF_QLA_TPG_ATTRIB(cache_dynamic_acls);
795QLA_TPG_ATTR(cache_dynamic_acls, S_IRUGO | S_IWUSR);
796
797/*
798 * Define tcm_qla2xxx_tpg_attrib_s_demo_mode_write_protect
799 */
800DEF_QLA_TPG_ATTR_BOOL(demo_mode_write_protect);
801DEF_QLA_TPG_ATTRIB(demo_mode_write_protect); 770DEF_QLA_TPG_ATTRIB(demo_mode_write_protect);
802QLA_TPG_ATTR(demo_mode_write_protect, S_IRUGO | S_IWUSR);
803
804/*
805 * Define tcm_qla2xxx_tpg_attrib_s_prod_mode_write_protect
806 */
807DEF_QLA_TPG_ATTR_BOOL(prod_mode_write_protect);
808DEF_QLA_TPG_ATTRIB(prod_mode_write_protect); 771DEF_QLA_TPG_ATTRIB(prod_mode_write_protect);
809QLA_TPG_ATTR(prod_mode_write_protect, S_IRUGO | S_IWUSR);
810
811/*
812 * Define tcm_qla2xxx_tpg_attrib_s_demo_mode_login_only
813 */
814DEF_QLA_TPG_ATTR_BOOL(demo_mode_login_only);
815DEF_QLA_TPG_ATTRIB(demo_mode_login_only); 772DEF_QLA_TPG_ATTRIB(demo_mode_login_only);
816QLA_TPG_ATTR(demo_mode_login_only, S_IRUGO | S_IWUSR);
817 773
818static struct configfs_attribute *tcm_qla2xxx_tpg_attrib_attrs[] = { 774static struct configfs_attribute *tcm_qla2xxx_tpg_attrib_attrs[] = {
819 &tcm_qla2xxx_tpg_attrib_generate_node_acls.attr, 775 &tcm_qla2xxx_tpg_attrib_attr_generate_node_acls,
820 &tcm_qla2xxx_tpg_attrib_cache_dynamic_acls.attr, 776 &tcm_qla2xxx_tpg_attrib_attr_cache_dynamic_acls,
821 &tcm_qla2xxx_tpg_attrib_demo_mode_write_protect.attr, 777 &tcm_qla2xxx_tpg_attrib_attr_demo_mode_write_protect,
822 &tcm_qla2xxx_tpg_attrib_prod_mode_write_protect.attr, 778 &tcm_qla2xxx_tpg_attrib_attr_prod_mode_write_protect,
823 &tcm_qla2xxx_tpg_attrib_demo_mode_login_only.attr, 779 &tcm_qla2xxx_tpg_attrib_attr_demo_mode_login_only,
824 NULL, 780 NULL,
825}; 781};
826 782
827/* End items for tcm_qla2xxx_tpg_attrib_cit */ 783/* End items for tcm_qla2xxx_tpg_attrib_cit */
828 784
829static ssize_t tcm_qla2xxx_tpg_show_enable( 785static ssize_t tcm_qla2xxx_tpg_enable_show(struct config_item *item,
830 struct se_portal_group *se_tpg, 786 char *page)
831 char *page)
832{ 787{
788 struct se_portal_group *se_tpg = to_tpg(item);
833 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, 789 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
834 struct tcm_qla2xxx_tpg, se_tpg); 790 struct tcm_qla2xxx_tpg, se_tpg);
835 791
@@ -865,11 +821,10 @@ static void tcm_qla2xxx_undepend_tpg(struct work_struct *work)
865 complete(&base_tpg->tpg_base_comp); 821 complete(&base_tpg->tpg_base_comp);
866} 822}
867 823
868static ssize_t tcm_qla2xxx_tpg_store_enable( 824static ssize_t tcm_qla2xxx_tpg_enable_store(struct config_item *item,
869 struct se_portal_group *se_tpg, 825 const char *page, size_t count)
870 const char *page,
871 size_t count)
872{ 826{
827 struct se_portal_group *se_tpg = to_tpg(item);
873 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, 828 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
874 struct tcm_qla2xxx_tpg, se_tpg); 829 struct tcm_qla2xxx_tpg, se_tpg);
875 unsigned long op; 830 unsigned long op;
@@ -909,22 +864,16 @@ static ssize_t tcm_qla2xxx_tpg_store_enable(
909 return count; 864 return count;
910} 865}
911 866
912TF_TPG_BASE_ATTR(tcm_qla2xxx, enable, S_IRUGO | S_IWUSR); 867static ssize_t tcm_qla2xxx_tpg_dynamic_sessions_show(struct config_item *item,
913 868 char *page)
914static ssize_t tcm_qla2xxx_tpg_show_dynamic_sessions(
915 struct se_portal_group *se_tpg,
916 char *page)
917{ 869{
918 return target_show_dynamic_sessions(se_tpg, page); 870 return target_show_dynamic_sessions(to_tpg(item), page);
919} 871}
920 872
921TF_TPG_BASE_ATTR_RO(tcm_qla2xxx, dynamic_sessions); 873static ssize_t tcm_qla2xxx_tpg_fabric_prot_type_store(struct config_item *item,
922 874 const char *page, size_t count)
923static ssize_t tcm_qla2xxx_tpg_store_fabric_prot_type(
924 struct se_portal_group *se_tpg,
925 const char *page,
926 size_t count)
927{ 875{
876 struct se_portal_group *se_tpg = to_tpg(item);
928 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, 877 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
929 struct tcm_qla2xxx_tpg, se_tpg); 878 struct tcm_qla2xxx_tpg, se_tpg);
930 unsigned long val; 879 unsigned long val;
@@ -943,21 +892,24 @@ static ssize_t tcm_qla2xxx_tpg_store_fabric_prot_type(
943 return count; 892 return count;
944} 893}
945 894
946static ssize_t tcm_qla2xxx_tpg_show_fabric_prot_type( 895static ssize_t tcm_qla2xxx_tpg_fabric_prot_type_show(struct config_item *item,
947 struct se_portal_group *se_tpg, 896 char *page)
948 char *page)
949{ 897{
898 struct se_portal_group *se_tpg = to_tpg(item);
950 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg, 899 struct tcm_qla2xxx_tpg *tpg = container_of(se_tpg,
951 struct tcm_qla2xxx_tpg, se_tpg); 900 struct tcm_qla2xxx_tpg, se_tpg);
952 901
953 return sprintf(page, "%d\n", tpg->tpg_attrib.fabric_prot_type); 902 return sprintf(page, "%d\n", tpg->tpg_attrib.fabric_prot_type);
954} 903}
955TF_TPG_BASE_ATTR(tcm_qla2xxx, fabric_prot_type, S_IRUGO | S_IWUSR); 904
905CONFIGFS_ATTR_WO(tcm_qla2xxx_tpg_, enable);
906CONFIGFS_ATTR_RO(tcm_qla2xxx_tpg_, dynamic_sessions);
907CONFIGFS_ATTR(tcm_qla2xxx_tpg_, fabric_prot_type);
956 908
957static struct configfs_attribute *tcm_qla2xxx_tpg_attrs[] = { 909static struct configfs_attribute *tcm_qla2xxx_tpg_attrs[] = {
958 &tcm_qla2xxx_tpg_enable.attr, 910 &tcm_qla2xxx_tpg_attr_enable,
959 &tcm_qla2xxx_tpg_dynamic_sessions.attr, 911 &tcm_qla2xxx_tpg_attr_dynamic_sessions,
960 &tcm_qla2xxx_tpg_fabric_prot_type.attr, 912 &tcm_qla2xxx_tpg_attr_fabric_prot_type,
961 NULL, 913 NULL,
962}; 914};
963 915
@@ -1030,18 +982,16 @@ static void tcm_qla2xxx_drop_tpg(struct se_portal_group *se_tpg)
1030 kfree(tpg); 982 kfree(tpg);
1031} 983}
1032 984
1033static ssize_t tcm_qla2xxx_npiv_tpg_show_enable( 985static ssize_t tcm_qla2xxx_npiv_tpg_enable_show(struct config_item *item,
1034 struct se_portal_group *se_tpg, 986 char *page)
1035 char *page)
1036{ 987{
1037 return tcm_qla2xxx_tpg_show_enable(se_tpg, page); 988 return tcm_qla2xxx_tpg_enable_show(item, page);
1038} 989}
1039 990
1040static ssize_t tcm_qla2xxx_npiv_tpg_store_enable( 991static ssize_t tcm_qla2xxx_npiv_tpg_enable_store(struct config_item *item,
1041 struct se_portal_group *se_tpg, 992 const char *page, size_t count)
1042 const char *page,
1043 size_t count)
1044{ 993{
994 struct se_portal_group *se_tpg = to_tpg(item);
1045 struct se_wwn *se_wwn = se_tpg->se_tpg_wwn; 995 struct se_wwn *se_wwn = se_tpg->se_tpg_wwn;
1046 struct tcm_qla2xxx_lport *lport = container_of(se_wwn, 996 struct tcm_qla2xxx_lport *lport = container_of(se_wwn,
1047 struct tcm_qla2xxx_lport, lport_wwn); 997 struct tcm_qla2xxx_lport, lport_wwn);
@@ -1077,10 +1027,10 @@ static ssize_t tcm_qla2xxx_npiv_tpg_store_enable(
1077 return count; 1027 return count;
1078} 1028}
1079 1029
1080TF_TPG_BASE_ATTR(tcm_qla2xxx_npiv, enable, S_IRUGO | S_IWUSR); 1030CONFIGFS_ATTR(tcm_qla2xxx_npiv_tpg_, enable);
1081 1031
1082static struct configfs_attribute *tcm_qla2xxx_npiv_tpg_attrs[] = { 1032static struct configfs_attribute *tcm_qla2xxx_npiv_tpg_attrs[] = {
1083 &tcm_qla2xxx_npiv_tpg_enable.attr, 1033 &tcm_qla2xxx_npiv_tpg_attr_enable,
1084 NULL, 1034 NULL,
1085}; 1035};
1086 1036
@@ -1783,9 +1733,8 @@ static void tcm_qla2xxx_npiv_drop_lport(struct se_wwn *wwn)
1783} 1733}
1784 1734
1785 1735
1786static ssize_t tcm_qla2xxx_wwn_show_attr_version( 1736static ssize_t tcm_qla2xxx_wwn_version_show(struct config_item *item,
1787 struct target_fabric_configfs *tf, 1737 char *page)
1788 char *page)
1789{ 1738{
1790 return sprintf(page, 1739 return sprintf(page,
1791 "TCM QLOGIC QLA2XXX NPIV capable fabric module %s on %s/%s on " 1740 "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 utsname()->machine); 1742 utsname()->machine);
1794} 1743}
1795 1744
1796TF_WWN_ATTR_RO(tcm_qla2xxx, version); 1745CONFIGFS_ATTR_RO(tcm_qla2xxx_wwn_, version);
1797 1746
1798static struct configfs_attribute *tcm_qla2xxx_wwn_attrs[] = { 1747static struct configfs_attribute *tcm_qla2xxx_wwn_attrs[] = {
1799 &tcm_qla2xxx_wwn_version.attr, 1748 &tcm_qla2xxx_wwn_attr_version,
1800 NULL, 1749 NULL,
1801}; 1750};
1802 1751
diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c
index c7461d770d3a..255204cc43e6 100644
--- a/drivers/target/iscsi/iscsi_target_configfs.c
+++ b/drivers/target/iscsi/iscsi_target_configfs.c
@@ -23,8 +23,6 @@
23#include <linux/inet.h> 23#include <linux/inet.h>
24#include <target/target_core_base.h> 24#include <target/target_core_base.h>
25#include <target/target_core_fabric.h> 25#include <target/target_core_fabric.h>
26#include <target/target_core_fabric_configfs.h>
27#include <target/configfs_macros.h>
28#include <target/iscsi/iscsi_transport.h> 26#include <target/iscsi/iscsi_transport.h>
29 27
30#include <target/iscsi/iscsi_target_core.h> 28#include <target/iscsi/iscsi_target_core.h>
@@ -37,20 +35,17 @@
37#include "iscsi_target.h" 35#include "iscsi_target.h"
38#include <target/iscsi/iscsi_target_stat.h> 36#include <target/iscsi/iscsi_target_stat.h>
39 37
40struct lio_target_configfs_attribute {
41 struct configfs_attribute attr;
42 ssize_t (*show)(void *, char *);
43 ssize_t (*store)(void *, const char *, size_t);
44};
45 38
46/* Start items for lio_target_portal_cit */ 39/* Start items for lio_target_portal_cit */
47 40
48static ssize_t lio_target_np_show_sctp( 41static inline struct iscsi_tpg_np *to_iscsi_tpg_np(struct config_item *item)
49 struct se_tpg_np *se_tpg_np, 42{
50 char *page) 43 return container_of(to_tpg_np(item), struct iscsi_tpg_np, se_tpg_np);
44}
45
46static ssize_t lio_target_np_sctp_show(struct config_item *item, char *page)
51{ 47{
52 struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np, 48 struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
53 struct iscsi_tpg_np, se_tpg_np);
54 struct iscsi_tpg_np *tpg_np_sctp; 49 struct iscsi_tpg_np *tpg_np_sctp;
55 ssize_t rb; 50 ssize_t rb;
56 51
@@ -63,15 +58,12 @@ static ssize_t lio_target_np_show_sctp(
63 return rb; 58 return rb;
64} 59}
65 60
66static ssize_t lio_target_np_store_sctp( 61static ssize_t lio_target_np_sctp_store(struct config_item *item,
67 struct se_tpg_np *se_tpg_np, 62 const char *page, size_t count)
68 const char *page,
69 size_t count)
70{ 63{
64 struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
71 struct iscsi_np *np; 65 struct iscsi_np *np;
72 struct iscsi_portal_group *tpg; 66 struct iscsi_portal_group *tpg;
73 struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np,
74 struct iscsi_tpg_np, se_tpg_np);
75 struct iscsi_tpg_np *tpg_np_sctp = NULL; 67 struct iscsi_tpg_np *tpg_np_sctp = NULL;
76 u32 op; 68 u32 op;
77 int ret; 69 int ret;
@@ -119,14 +111,9 @@ out:
119 return -EINVAL; 111 return -EINVAL;
120} 112}
121 113
122TF_NP_BASE_ATTR(lio_target, sctp, S_IRUGO | S_IWUSR); 114static ssize_t lio_target_np_iser_show(struct config_item *item, char *page)
123
124static ssize_t lio_target_np_show_iser(
125 struct se_tpg_np *se_tpg_np,
126 char *page)
127{ 115{
128 struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np, 116 struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
129 struct iscsi_tpg_np, se_tpg_np);
130 struct iscsi_tpg_np *tpg_np_iser; 117 struct iscsi_tpg_np *tpg_np_iser;
131 ssize_t rb; 118 ssize_t rb;
132 119
@@ -139,15 +126,12 @@ static ssize_t lio_target_np_show_iser(
139 return rb; 126 return rb;
140} 127}
141 128
142static ssize_t lio_target_np_store_iser( 129static ssize_t lio_target_np_iser_store(struct config_item *item,
143 struct se_tpg_np *se_tpg_np, 130 const char *page, size_t count)
144 const char *page,
145 size_t count)
146{ 131{
132 struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
147 struct iscsi_np *np; 133 struct iscsi_np *np;
148 struct iscsi_portal_group *tpg; 134 struct iscsi_portal_group *tpg;
149 struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np,
150 struct iscsi_tpg_np, se_tpg_np);
151 struct iscsi_tpg_np *tpg_np_iser = NULL; 135 struct iscsi_tpg_np *tpg_np_iser = NULL;
152 char *endptr; 136 char *endptr;
153 u32 op; 137 u32 op;
@@ -198,11 +182,12 @@ out:
198 return rc; 182 return rc;
199} 183}
200 184
201TF_NP_BASE_ATTR(lio_target, iser, S_IRUGO | S_IWUSR); 185CONFIGFS_ATTR(lio_target_np_, sctp);
186CONFIGFS_ATTR(lio_target_np_, iser);
202 187
203static struct configfs_attribute *lio_target_portal_attrs[] = { 188static struct configfs_attribute *lio_target_portal_attrs[] = {
204 &lio_target_np_sctp.attr, 189 &lio_target_np_attr_sctp,
205 &lio_target_np_iser.attr, 190 &lio_target_np_attr_iser,
206 NULL, 191 NULL,
207}; 192};
208 193
@@ -360,22 +345,21 @@ out:
360 345
361/* Start items for lio_target_nacl_attrib_cit */ 346/* Start items for lio_target_nacl_attrib_cit */
362 347
363#define DEF_NACL_ATTRIB(name) \ 348#define ISCSI_NACL_ATTR(name) \
364static ssize_t iscsi_nacl_attrib_show_##name( \ 349static ssize_t iscsi_nacl_attrib_##name##_show(struct config_item *item,\
365 struct se_node_acl *se_nacl, \ 350 char *page) \
366 char *page) \
367{ \ 351{ \
352 struct se_node_acl *se_nacl = attrib_to_nacl(item); \
368 struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \ 353 struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \
369 se_node_acl); \ 354 se_node_acl); \
370 \ 355 \
371 return sprintf(page, "%u\n", nacl->node_attrib.name); \ 356 return sprintf(page, "%u\n", nacl->node_attrib.name); \
372} \ 357} \
373 \ 358 \
374static ssize_t iscsi_nacl_attrib_store_##name( \ 359static ssize_t iscsi_nacl_attrib_##name##_store(struct config_item *item,\
375 struct se_node_acl *se_nacl, \ 360 const char *page, size_t count) \
376 const char *page, \
377 size_t count) \
378{ \ 361{ \
362 struct se_node_acl *se_nacl = attrib_to_nacl(item); \
379 struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \ 363 struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \
380 se_node_acl); \ 364 se_node_acl); \
381 u32 val; \ 365 u32 val; \
@@ -389,59 +373,28 @@ static ssize_t iscsi_nacl_attrib_store_##name( \
389 return ret; \ 373 return ret; \
390 \ 374 \
391 return count; \ 375 return count; \
392} 376} \
377 \
378CONFIGFS_ATTR(iscsi_nacl_attrib_, name)
393 379
394#define NACL_ATTR(_name, _mode) TF_NACL_ATTRIB_ATTR(iscsi, _name, _mode); 380ISCSI_NACL_ATTR(dataout_timeout);
395/* 381ISCSI_NACL_ATTR(dataout_timeout_retries);
396 * Define iscsi_node_attrib_s_dataout_timeout 382ISCSI_NACL_ATTR(default_erl);
397 */ 383ISCSI_NACL_ATTR(nopin_timeout);
398DEF_NACL_ATTRIB(dataout_timeout); 384ISCSI_NACL_ATTR(nopin_response_timeout);
399NACL_ATTR(dataout_timeout, S_IRUGO | S_IWUSR); 385ISCSI_NACL_ATTR(random_datain_pdu_offsets);
400/* 386ISCSI_NACL_ATTR(random_datain_seq_offsets);
401 * Define iscsi_node_attrib_s_dataout_timeout_retries 387ISCSI_NACL_ATTR(random_r2t_offsets);
402 */
403DEF_NACL_ATTRIB(dataout_timeout_retries);
404NACL_ATTR(dataout_timeout_retries, S_IRUGO | S_IWUSR);
405/*
406 * Define iscsi_node_attrib_s_default_erl
407 */
408DEF_NACL_ATTRIB(default_erl);
409NACL_ATTR(default_erl, S_IRUGO | S_IWUSR);
410/*
411 * Define iscsi_node_attrib_s_nopin_timeout
412 */
413DEF_NACL_ATTRIB(nopin_timeout);
414NACL_ATTR(nopin_timeout, S_IRUGO | S_IWUSR);
415/*
416 * Define iscsi_node_attrib_s_nopin_response_timeout
417 */
418DEF_NACL_ATTRIB(nopin_response_timeout);
419NACL_ATTR(nopin_response_timeout, S_IRUGO | S_IWUSR);
420/*
421 * Define iscsi_node_attrib_s_random_datain_pdu_offsets
422 */
423DEF_NACL_ATTRIB(random_datain_pdu_offsets);
424NACL_ATTR(random_datain_pdu_offsets, S_IRUGO | S_IWUSR);
425/*
426 * Define iscsi_node_attrib_s_random_datain_seq_offsets
427 */
428DEF_NACL_ATTRIB(random_datain_seq_offsets);
429NACL_ATTR(random_datain_seq_offsets, S_IRUGO | S_IWUSR);
430/*
431 * Define iscsi_node_attrib_s_random_r2t_offsets
432 */
433DEF_NACL_ATTRIB(random_r2t_offsets);
434NACL_ATTR(random_r2t_offsets, S_IRUGO | S_IWUSR);
435 388
436static struct configfs_attribute *lio_target_nacl_attrib_attrs[] = { 389static struct configfs_attribute *lio_target_nacl_attrib_attrs[] = {
437 &iscsi_nacl_attrib_dataout_timeout.attr, 390 &iscsi_nacl_attrib_attr_dataout_timeout,
438 &iscsi_nacl_attrib_dataout_timeout_retries.attr, 391 &iscsi_nacl_attrib_attr_dataout_timeout_retries,
439 &iscsi_nacl_attrib_default_erl.attr, 392 &iscsi_nacl_attrib_attr_default_erl,
440 &iscsi_nacl_attrib_nopin_timeout.attr, 393 &iscsi_nacl_attrib_attr_nopin_timeout,
441 &iscsi_nacl_attrib_nopin_response_timeout.attr, 394 &iscsi_nacl_attrib_attr_nopin_response_timeout,
442 &iscsi_nacl_attrib_random_datain_pdu_offsets.attr, 395 &iscsi_nacl_attrib_attr_random_datain_pdu_offsets,
443 &iscsi_nacl_attrib_random_datain_seq_offsets.attr, 396 &iscsi_nacl_attrib_attr_random_datain_seq_offsets,
444 &iscsi_nacl_attrib_random_r2t_offsets.attr, 397 &iscsi_nacl_attrib_attr_random_r2t_offsets,
445 NULL, 398 NULL,
446}; 399};
447 400
@@ -450,7 +403,7 @@ static struct configfs_attribute *lio_target_nacl_attrib_attrs[] = {
450/* Start items for lio_target_nacl_auth_cit */ 403/* Start items for lio_target_nacl_auth_cit */
451 404
452#define __DEF_NACL_AUTH_STR(prefix, name, flags) \ 405#define __DEF_NACL_AUTH_STR(prefix, name, flags) \
453static ssize_t __iscsi_##prefix##_show_##name( \ 406static ssize_t __iscsi_##prefix##_##name##_show( \
454 struct iscsi_node_acl *nacl, \ 407 struct iscsi_node_acl *nacl, \
455 char *page) \ 408 char *page) \
456{ \ 409{ \
@@ -461,7 +414,7 @@ static ssize_t __iscsi_##prefix##_show_##name( \
461 return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \ 414 return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \
462} \ 415} \
463 \ 416 \
464static ssize_t __iscsi_##prefix##_store_##name( \ 417static ssize_t __iscsi_##prefix##_##name##_store( \
465 struct iscsi_node_acl *nacl, \ 418 struct iscsi_node_acl *nacl, \
466 const char *page, \ 419 const char *page, \
467 size_t count) \ 420 size_t count) \
@@ -487,8 +440,35 @@ static ssize_t __iscsi_##prefix##_store_##name( \
487 return count; \ 440 return count; \
488} 441}
489 442
443#define DEF_NACL_AUTH_STR(name, flags) \
444 __DEF_NACL_AUTH_STR(nacl_auth, name, flags) \
445static ssize_t iscsi_nacl_auth_##name##_show(struct config_item *item, \
446 char *page) \
447{ \
448 struct se_node_acl *nacl = auth_to_nacl(item); \
449 return __iscsi_nacl_auth_##name##_show(container_of(nacl, \
450 struct iscsi_node_acl, se_node_acl), page); \
451} \
452static ssize_t iscsi_nacl_auth_##name##_store(struct config_item *item, \
453 const char *page, size_t count) \
454{ \
455 struct se_node_acl *nacl = auth_to_nacl(item); \
456 return __iscsi_nacl_auth_##name##_store(container_of(nacl, \
457 struct iscsi_node_acl, se_node_acl), page, count); \
458} \
459 \
460CONFIGFS_ATTR(iscsi_nacl_auth_, name)
461
462/*
463 * One-way authentication userid
464 */
465DEF_NACL_AUTH_STR(userid, NAF_USERID_SET);
466DEF_NACL_AUTH_STR(password, NAF_PASSWORD_SET);
467DEF_NACL_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
468DEF_NACL_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
469
490#define __DEF_NACL_AUTH_INT(prefix, name) \ 470#define __DEF_NACL_AUTH_INT(prefix, name) \
491static ssize_t __iscsi_##prefix##_show_##name( \ 471static ssize_t __iscsi_##prefix##_##name##_show( \
492 struct iscsi_node_acl *nacl, \ 472 struct iscsi_node_acl *nacl, \
493 char *page) \ 473 char *page) \
494{ \ 474{ \
@@ -500,69 +480,26 @@ static ssize_t __iscsi_##prefix##_show_##name( \
500 return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \ 480 return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \
501} 481}
502 482
503#define DEF_NACL_AUTH_STR(name, flags) \
504 __DEF_NACL_AUTH_STR(nacl_auth, name, flags) \
505static ssize_t iscsi_nacl_auth_show_##name( \
506 struct se_node_acl *nacl, \
507 char *page) \
508{ \
509 return __iscsi_nacl_auth_show_##name(container_of(nacl, \
510 struct iscsi_node_acl, se_node_acl), page); \
511} \
512static ssize_t iscsi_nacl_auth_store_##name( \
513 struct se_node_acl *nacl, \
514 const char *page, \
515 size_t count) \
516{ \
517 return __iscsi_nacl_auth_store_##name(container_of(nacl, \
518 struct iscsi_node_acl, se_node_acl), page, count); \
519}
520
521#define DEF_NACL_AUTH_INT(name) \ 483#define DEF_NACL_AUTH_INT(name) \
522 __DEF_NACL_AUTH_INT(nacl_auth, name) \ 484 __DEF_NACL_AUTH_INT(nacl_auth, name) \
523static ssize_t iscsi_nacl_auth_show_##name( \ 485static ssize_t iscsi_nacl_auth_##name##_show(struct config_item *item, \
524 struct se_node_acl *nacl, \ 486 char *page) \
525 char *page) \
526{ \ 487{ \
527 return __iscsi_nacl_auth_show_##name(container_of(nacl, \ 488 struct se_node_acl *nacl = auth_to_nacl(item); \
528 struct iscsi_node_acl, se_node_acl), page); \ 489 return __iscsi_nacl_auth_##name##_show(container_of(nacl, \
529} 490 struct iscsi_node_acl, se_node_acl), page); \
530 491} \
531#define AUTH_ATTR(_name, _mode) TF_NACL_AUTH_ATTR(iscsi, _name, _mode); 492 \
532#define AUTH_ATTR_RO(_name) TF_NACL_AUTH_ATTR_RO(iscsi, _name); 493CONFIGFS_ATTR_RO(iscsi_nacl_auth_, name)
533 494
534/*
535 * One-way authentication userid
536 */
537DEF_NACL_AUTH_STR(userid, NAF_USERID_SET);
538AUTH_ATTR(userid, S_IRUGO | S_IWUSR);
539/*
540 * One-way authentication password
541 */
542DEF_NACL_AUTH_STR(password, NAF_PASSWORD_SET);
543AUTH_ATTR(password, S_IRUGO | S_IWUSR);
544/*
545 * Enforce mutual authentication
546 */
547DEF_NACL_AUTH_INT(authenticate_target); 495DEF_NACL_AUTH_INT(authenticate_target);
548AUTH_ATTR_RO(authenticate_target);
549/*
550 * Mutual authentication userid
551 */
552DEF_NACL_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
553AUTH_ATTR(userid_mutual, S_IRUGO | S_IWUSR);
554/*
555 * Mutual authentication password
556 */
557DEF_NACL_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
558AUTH_ATTR(password_mutual, S_IRUGO | S_IWUSR);
559 496
560static struct configfs_attribute *lio_target_nacl_auth_attrs[] = { 497static struct configfs_attribute *lio_target_nacl_auth_attrs[] = {
561 &iscsi_nacl_auth_userid.attr, 498 &iscsi_nacl_auth_attr_userid,
562 &iscsi_nacl_auth_password.attr, 499 &iscsi_nacl_auth_attr_password,
563 &iscsi_nacl_auth_authenticate_target.attr, 500 &iscsi_nacl_auth_attr_authenticate_target,
564 &iscsi_nacl_auth_userid_mutual.attr, 501 &iscsi_nacl_auth_attr_userid_mutual,
565 &iscsi_nacl_auth_password_mutual.attr, 502 &iscsi_nacl_auth_attr_password_mutual,
566 NULL, 503 NULL,
567}; 504};
568 505
@@ -570,11 +507,11 @@ static struct configfs_attribute *lio_target_nacl_auth_attrs[] = {
570 507
571/* Start items for lio_target_nacl_param_cit */ 508/* Start items for lio_target_nacl_param_cit */
572 509
573#define DEF_NACL_PARAM(name) \ 510#define ISCSI_NACL_PARAM(name) \
574static ssize_t iscsi_nacl_param_show_##name( \ 511static ssize_t iscsi_nacl_param_##name##_show(struct config_item *item, \
575 struct se_node_acl *se_nacl, \ 512 char *page) \
576 char *page) \
577{ \ 513{ \
514 struct se_node_acl *se_nacl = param_to_nacl(item); \
578 struct iscsi_session *sess; \ 515 struct iscsi_session *sess; \
579 struct se_session *se_sess; \ 516 struct se_session *se_sess; \
580 ssize_t rb; \ 517 ssize_t rb; \
@@ -592,55 +529,34 @@ static ssize_t iscsi_nacl_param_show_##name( \
592 spin_unlock_bh(&se_nacl->nacl_sess_lock); \ 529 spin_unlock_bh(&se_nacl->nacl_sess_lock); \
593 \ 530 \
594 return rb; \ 531 return rb; \
595} 532} \
596 533 \
597#define NACL_PARAM_ATTR(_name) TF_NACL_PARAM_ATTR_RO(iscsi, _name); 534CONFIGFS_ATTR_RO(iscsi_nacl_param_, name)
598 535
599DEF_NACL_PARAM(MaxConnections); 536ISCSI_NACL_PARAM(MaxConnections);
600NACL_PARAM_ATTR(MaxConnections); 537ISCSI_NACL_PARAM(InitialR2T);
601 538ISCSI_NACL_PARAM(ImmediateData);
602DEF_NACL_PARAM(InitialR2T); 539ISCSI_NACL_PARAM(MaxBurstLength);
603NACL_PARAM_ATTR(InitialR2T); 540ISCSI_NACL_PARAM(FirstBurstLength);
604 541ISCSI_NACL_PARAM(DefaultTime2Wait);
605DEF_NACL_PARAM(ImmediateData); 542ISCSI_NACL_PARAM(DefaultTime2Retain);
606NACL_PARAM_ATTR(ImmediateData); 543ISCSI_NACL_PARAM(MaxOutstandingR2T);
607 544ISCSI_NACL_PARAM(DataPDUInOrder);
608DEF_NACL_PARAM(MaxBurstLength); 545ISCSI_NACL_PARAM(DataSequenceInOrder);
609NACL_PARAM_ATTR(MaxBurstLength); 546ISCSI_NACL_PARAM(ErrorRecoveryLevel);
610
611DEF_NACL_PARAM(FirstBurstLength);
612NACL_PARAM_ATTR(FirstBurstLength);
613
614DEF_NACL_PARAM(DefaultTime2Wait);
615NACL_PARAM_ATTR(DefaultTime2Wait);
616
617DEF_NACL_PARAM(DefaultTime2Retain);
618NACL_PARAM_ATTR(DefaultTime2Retain);
619
620DEF_NACL_PARAM(MaxOutstandingR2T);
621NACL_PARAM_ATTR(MaxOutstandingR2T);
622
623DEF_NACL_PARAM(DataPDUInOrder);
624NACL_PARAM_ATTR(DataPDUInOrder);
625
626DEF_NACL_PARAM(DataSequenceInOrder);
627NACL_PARAM_ATTR(DataSequenceInOrder);
628
629DEF_NACL_PARAM(ErrorRecoveryLevel);
630NACL_PARAM_ATTR(ErrorRecoveryLevel);
631 547
632static struct configfs_attribute *lio_target_nacl_param_attrs[] = { 548static struct configfs_attribute *lio_target_nacl_param_attrs[] = {
633 &iscsi_nacl_param_MaxConnections.attr, 549 &iscsi_nacl_param_attr_MaxConnections,
634 &iscsi_nacl_param_InitialR2T.attr, 550 &iscsi_nacl_param_attr_InitialR2T,
635 &iscsi_nacl_param_ImmediateData.attr, 551 &iscsi_nacl_param_attr_ImmediateData,
636 &iscsi_nacl_param_MaxBurstLength.attr, 552 &iscsi_nacl_param_attr_MaxBurstLength,
637 &iscsi_nacl_param_FirstBurstLength.attr, 553 &iscsi_nacl_param_attr_FirstBurstLength,
638 &iscsi_nacl_param_DefaultTime2Wait.attr, 554 &iscsi_nacl_param_attr_DefaultTime2Wait,
639 &iscsi_nacl_param_DefaultTime2Retain.attr, 555 &iscsi_nacl_param_attr_DefaultTime2Retain,
640 &iscsi_nacl_param_MaxOutstandingR2T.attr, 556 &iscsi_nacl_param_attr_MaxOutstandingR2T,
641 &iscsi_nacl_param_DataPDUInOrder.attr, 557 &iscsi_nacl_param_attr_DataPDUInOrder,
642 &iscsi_nacl_param_DataSequenceInOrder.attr, 558 &iscsi_nacl_param_attr_DataSequenceInOrder,
643 &iscsi_nacl_param_ErrorRecoveryLevel.attr, 559 &iscsi_nacl_param_attr_ErrorRecoveryLevel,
644 NULL, 560 NULL,
645}; 561};
646 562
@@ -648,10 +564,9 @@ static struct configfs_attribute *lio_target_nacl_param_attrs[] = {
648 564
649/* Start items for lio_target_acl_cit */ 565/* Start items for lio_target_acl_cit */
650 566
651static ssize_t lio_target_nacl_show_info( 567static ssize_t lio_target_nacl_info_show(struct config_item *item, char *page)
652 struct se_node_acl *se_nacl,
653 char *page)
654{ 568{
569 struct se_node_acl *se_nacl = acl_to_nacl(item);
655 struct iscsi_session *sess; 570 struct iscsi_session *sess;
656 struct iscsi_conn *conn; 571 struct iscsi_conn *conn;
657 struct se_session *se_sess; 572 struct se_session *se_sess;
@@ -766,20 +681,16 @@ static ssize_t lio_target_nacl_show_info(
766 return rb; 681 return rb;
767} 682}
768 683
769TF_NACL_BASE_ATTR_RO(lio_target, info); 684static ssize_t lio_target_nacl_cmdsn_depth_show(struct config_item *item,
770 685 char *page)
771static ssize_t lio_target_nacl_show_cmdsn_depth(
772 struct se_node_acl *se_nacl,
773 char *page)
774{ 686{
775 return sprintf(page, "%u\n", se_nacl->queue_depth); 687 return sprintf(page, "%u\n", acl_to_nacl(item)->queue_depth);
776} 688}
777 689
778static ssize_t lio_target_nacl_store_cmdsn_depth( 690static ssize_t lio_target_nacl_cmdsn_depth_store(struct config_item *item,
779 struct se_node_acl *se_nacl, 691 const char *page, size_t count)
780 const char *page,
781 size_t count)
782{ 692{
693 struct se_node_acl *se_nacl = acl_to_nacl(item);
783 struct se_portal_group *se_tpg = se_nacl->se_tpg; 694 struct se_portal_group *se_tpg = se_nacl->se_tpg;
784 struct iscsi_portal_group *tpg = container_of(se_tpg, 695 struct iscsi_portal_group *tpg = container_of(se_tpg,
785 struct iscsi_portal_group, tpg_se_tpg); 696 struct iscsi_portal_group, tpg_se_tpg);
@@ -829,20 +740,15 @@ static ssize_t lio_target_nacl_store_cmdsn_depth(
829 return (!ret) ? count : (ssize_t)ret; 740 return (!ret) ? count : (ssize_t)ret;
830} 741}
831 742
832TF_NACL_BASE_ATTR(lio_target, cmdsn_depth, S_IRUGO | S_IWUSR); 743static ssize_t lio_target_nacl_tag_show(struct config_item *item, char *page)
833
834static ssize_t lio_target_nacl_show_tag(
835 struct se_node_acl *se_nacl,
836 char *page)
837{ 744{
838 return snprintf(page, PAGE_SIZE, "%s", se_nacl->acl_tag); 745 return snprintf(page, PAGE_SIZE, "%s", acl_to_nacl(item)->acl_tag);
839} 746}
840 747
841static ssize_t lio_target_nacl_store_tag( 748static ssize_t lio_target_nacl_tag_store(struct config_item *item,
842 struct se_node_acl *se_nacl, 749 const char *page, size_t count)
843 const char *page,
844 size_t count)
845{ 750{
751 struct se_node_acl *se_nacl = acl_to_nacl(item);
846 int ret; 752 int ret;
847 753
848 ret = core_tpg_set_initiator_node_tag(se_nacl->se_tpg, se_nacl, page); 754 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 return count; 758 return count;
853} 759}
854 760
855TF_NACL_BASE_ATTR(lio_target, tag, S_IRUGO | S_IWUSR); 761CONFIGFS_ATTR_RO(lio_target_nacl_, info);
762CONFIGFS_ATTR(lio_target_nacl_, cmdsn_depth);
763CONFIGFS_ATTR(lio_target_nacl_, tag);
856 764
857static struct configfs_attribute *lio_target_initiator_attrs[] = { 765static struct configfs_attribute *lio_target_initiator_attrs[] = {
858 &lio_target_nacl_info.attr, 766 &lio_target_nacl_attr_info,
859 &lio_target_nacl_cmdsn_depth.attr, 767 &lio_target_nacl_attr_cmdsn_depth,
860 &lio_target_nacl_tag.attr, 768 &lio_target_nacl_attr_tag,
861 NULL, 769 NULL,
862}; 770};
863 771
@@ -907,10 +815,10 @@ static void lio_target_cleanup_nodeacl( struct se_node_acl *se_nacl)
907 815
908#define DEF_TPG_ATTRIB(name) \ 816#define DEF_TPG_ATTRIB(name) \
909 \ 817 \
910static ssize_t iscsi_tpg_attrib_show_##name( \ 818static ssize_t iscsi_tpg_attrib_##name##_show(struct config_item *item, \
911 struct se_portal_group *se_tpg, \ 819 char *page) \
912 char *page) \
913{ \ 820{ \
821 struct se_portal_group *se_tpg = attrib_to_tpg(item); \
914 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 822 struct iscsi_portal_group *tpg = container_of(se_tpg, \
915 struct iscsi_portal_group, tpg_se_tpg); \ 823 struct iscsi_portal_group, tpg_se_tpg); \
916 ssize_t rb; \ 824 ssize_t rb; \
@@ -923,11 +831,10 @@ static ssize_t iscsi_tpg_attrib_show_##name( \
923 return rb; \ 831 return rb; \
924} \ 832} \
925 \ 833 \
926static ssize_t iscsi_tpg_attrib_store_##name( \ 834static ssize_t iscsi_tpg_attrib_##name##_store(struct config_item *item,\
927 struct se_portal_group *se_tpg, \ 835 const char *page, size_t count) \
928 const char *page, \
929 size_t count) \
930{ \ 836{ \
837 struct se_portal_group *se_tpg = attrib_to_tpg(item); \
931 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 838 struct iscsi_portal_group *tpg = container_of(se_tpg, \
932 struct iscsi_portal_group, tpg_se_tpg); \ 839 struct iscsi_portal_group, tpg_se_tpg); \
933 u32 val; \ 840 u32 val; \
@@ -948,90 +855,37 @@ static ssize_t iscsi_tpg_attrib_store_##name( \
948out: \ 855out: \
949 iscsit_put_tpg(tpg); \ 856 iscsit_put_tpg(tpg); \
950 return ret; \ 857 return ret; \
951} 858} \
952 859CONFIGFS_ATTR(iscsi_tpg_attrib_, name)
953#define TPG_ATTR(_name, _mode) TF_TPG_ATTRIB_ATTR(iscsi, _name, _mode);
954 860
955/*
956 * Define iscsi_tpg_attrib_s_authentication
957 */
958DEF_TPG_ATTRIB(authentication); 861DEF_TPG_ATTRIB(authentication);
959TPG_ATTR(authentication, S_IRUGO | S_IWUSR);
960/*
961 * Define iscsi_tpg_attrib_s_login_timeout
962 */
963DEF_TPG_ATTRIB(login_timeout); 862DEF_TPG_ATTRIB(login_timeout);
964TPG_ATTR(login_timeout, S_IRUGO | S_IWUSR);
965/*
966 * Define iscsi_tpg_attrib_s_netif_timeout
967 */
968DEF_TPG_ATTRIB(netif_timeout); 863DEF_TPG_ATTRIB(netif_timeout);
969TPG_ATTR(netif_timeout, S_IRUGO | S_IWUSR);
970/*
971 * Define iscsi_tpg_attrib_s_generate_node_acls
972 */
973DEF_TPG_ATTRIB(generate_node_acls); 864DEF_TPG_ATTRIB(generate_node_acls);
974TPG_ATTR(generate_node_acls, S_IRUGO | S_IWUSR);
975/*
976 * Define iscsi_tpg_attrib_s_default_cmdsn_depth
977 */
978DEF_TPG_ATTRIB(default_cmdsn_depth); 865DEF_TPG_ATTRIB(default_cmdsn_depth);
979TPG_ATTR(default_cmdsn_depth, S_IRUGO | S_IWUSR);
980/*
981 Define iscsi_tpg_attrib_s_cache_dynamic_acls
982 */
983DEF_TPG_ATTRIB(cache_dynamic_acls); 866DEF_TPG_ATTRIB(cache_dynamic_acls);
984TPG_ATTR(cache_dynamic_acls, S_IRUGO | S_IWUSR);
985/*
986 * Define iscsi_tpg_attrib_s_demo_mode_write_protect
987 */
988DEF_TPG_ATTRIB(demo_mode_write_protect); 867DEF_TPG_ATTRIB(demo_mode_write_protect);
989TPG_ATTR(demo_mode_write_protect, S_IRUGO | S_IWUSR);
990/*
991 * Define iscsi_tpg_attrib_s_prod_mode_write_protect
992 */
993DEF_TPG_ATTRIB(prod_mode_write_protect); 868DEF_TPG_ATTRIB(prod_mode_write_protect);
994TPG_ATTR(prod_mode_write_protect, S_IRUGO | S_IWUSR);
995/*
996 * Define iscsi_tpg_attrib_s_demo_mode_discovery,
997 */
998DEF_TPG_ATTRIB(demo_mode_discovery); 869DEF_TPG_ATTRIB(demo_mode_discovery);
999TPG_ATTR(demo_mode_discovery, S_IRUGO | S_IWUSR);
1000/*
1001 * Define iscsi_tpg_attrib_s_default_erl
1002 */
1003DEF_TPG_ATTRIB(default_erl); 870DEF_TPG_ATTRIB(default_erl);
1004TPG_ATTR(default_erl, S_IRUGO | S_IWUSR);
1005/*
1006 * Define iscsi_tpg_attrib_s_t10_pi
1007 */
1008DEF_TPG_ATTRIB(t10_pi); 871DEF_TPG_ATTRIB(t10_pi);
1009TPG_ATTR(t10_pi, S_IRUGO | S_IWUSR);
1010/*
1011 * Define iscsi_tpg_attrib_s_fabric_prot_type
1012 */
1013DEF_TPG_ATTRIB(fabric_prot_type); 872DEF_TPG_ATTRIB(fabric_prot_type);
1014TPG_ATTR(fabric_prot_type, S_IRUGO | S_IWUSR);
1015/*
1016 * Define iscsi_tpg_attrib_s_tpg_enabled_sendtargets
1017 */
1018DEF_TPG_ATTRIB(tpg_enabled_sendtargets); 873DEF_TPG_ATTRIB(tpg_enabled_sendtargets);
1019TPG_ATTR(tpg_enabled_sendtargets, S_IRUGO | S_IWUSR);
1020 874
1021static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { 875static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
1022 &iscsi_tpg_attrib_authentication.attr, 876 &iscsi_tpg_attrib_attr_authentication,
1023 &iscsi_tpg_attrib_login_timeout.attr, 877 &iscsi_tpg_attrib_attr_login_timeout,
1024 &iscsi_tpg_attrib_netif_timeout.attr, 878 &iscsi_tpg_attrib_attr_netif_timeout,
1025 &iscsi_tpg_attrib_generate_node_acls.attr, 879 &iscsi_tpg_attrib_attr_generate_node_acls,
1026 &iscsi_tpg_attrib_default_cmdsn_depth.attr, 880 &iscsi_tpg_attrib_attr_default_cmdsn_depth,
1027 &iscsi_tpg_attrib_cache_dynamic_acls.attr, 881 &iscsi_tpg_attrib_attr_cache_dynamic_acls,
1028 &iscsi_tpg_attrib_demo_mode_write_protect.attr, 882 &iscsi_tpg_attrib_attr_demo_mode_write_protect,
1029 &iscsi_tpg_attrib_prod_mode_write_protect.attr, 883 &iscsi_tpg_attrib_attr_prod_mode_write_protect,
1030 &iscsi_tpg_attrib_demo_mode_discovery.attr, 884 &iscsi_tpg_attrib_attr_demo_mode_discovery,
1031 &iscsi_tpg_attrib_default_erl.attr, 885 &iscsi_tpg_attrib_attr_default_erl,
1032 &iscsi_tpg_attrib_t10_pi.attr, 886 &iscsi_tpg_attrib_attr_t10_pi,
1033 &iscsi_tpg_attrib_fabric_prot_type.attr, 887 &iscsi_tpg_attrib_attr_fabric_prot_type,
1034 &iscsi_tpg_attrib_tpg_enabled_sendtargets.attr, 888 &iscsi_tpg_attrib_attr_tpg_enabled_sendtargets,
1035 NULL, 889 NULL,
1036}; 890};
1037 891
@@ -1040,9 +894,8 @@ static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
1040/* Start items for lio_target_tpg_auth_cit */ 894/* Start items for lio_target_tpg_auth_cit */
1041 895
1042#define __DEF_TPG_AUTH_STR(prefix, name, flags) \ 896#define __DEF_TPG_AUTH_STR(prefix, name, flags) \
1043static ssize_t __iscsi_##prefix##_show_##name( \ 897static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg, \
1044 struct se_portal_group *se_tpg, \ 898 char *page) \
1045 char *page) \
1046{ \ 899{ \
1047 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 900 struct iscsi_portal_group *tpg = container_of(se_tpg, \
1048 struct iscsi_portal_group, tpg_se_tpg); \ 901 struct iscsi_portal_group, tpg_se_tpg); \
@@ -1054,10 +907,8 @@ static ssize_t __iscsi_##prefix##_show_##name( \
1054 return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \ 907 return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \
1055} \ 908} \
1056 \ 909 \
1057static ssize_t __iscsi_##prefix##_store_##name( \ 910static ssize_t __iscsi_##prefix##_##name##_store(struct se_portal_group *se_tpg,\
1058 struct se_portal_group *se_tpg, \ 911 const char *page, size_t count) \
1059 const char *page, \
1060 size_t count) \
1061{ \ 912{ \
1062 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 913 struct iscsi_portal_group *tpg = container_of(se_tpg, \
1063 struct iscsi_portal_group, tpg_se_tpg); \ 914 struct iscsi_portal_group, tpg_se_tpg); \
@@ -1081,10 +932,31 @@ static ssize_t __iscsi_##prefix##_store_##name( \
1081 return count; \ 932 return count; \
1082} 933}
1083 934
935#define DEF_TPG_AUTH_STR(name, flags) \
936 __DEF_TPG_AUTH_STR(tpg_auth, name, flags) \
937static ssize_t iscsi_tpg_auth_##name##_show(struct config_item *item, \
938 char *page) \
939{ \
940 return __iscsi_tpg_auth_##name##_show(auth_to_tpg(item), page); \
941} \
942 \
943static ssize_t iscsi_tpg_auth_##name##_store(struct config_item *item, \
944 const char *page, size_t count) \
945{ \
946 return __iscsi_tpg_auth_##name##_store(auth_to_tpg(item), page, count); \
947} \
948 \
949CONFIGFS_ATTR(iscsi_tpg_auth_, name);
950
951
952DEF_TPG_AUTH_STR(userid, NAF_USERID_SET);
953DEF_TPG_AUTH_STR(password, NAF_PASSWORD_SET);
954DEF_TPG_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
955DEF_TPG_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
956
1084#define __DEF_TPG_AUTH_INT(prefix, name) \ 957#define __DEF_TPG_AUTH_INT(prefix, name) \
1085static ssize_t __iscsi_##prefix##_show_##name( \ 958static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg, \
1086 struct se_portal_group *se_tpg, \ 959 char *page) \
1087 char *page) \
1088{ \ 960{ \
1089 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 961 struct iscsi_portal_group *tpg = container_of(se_tpg, \
1090 struct iscsi_portal_group, tpg_se_tpg); \ 962 struct iscsi_portal_group, tpg_se_tpg); \
@@ -1096,67 +968,23 @@ static ssize_t __iscsi_##prefix##_show_##name( \
1096 return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \ 968 return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \
1097} 969}
1098 970
1099#define DEF_TPG_AUTH_STR(name, flags) \
1100 __DEF_TPG_AUTH_STR(tpg_auth, name, flags) \
1101static ssize_t iscsi_tpg_auth_show_##name( \
1102 struct se_portal_group *se_tpg, \
1103 char *page) \
1104{ \
1105 return __iscsi_tpg_auth_show_##name(se_tpg, page); \
1106} \
1107 \
1108static ssize_t iscsi_tpg_auth_store_##name( \
1109 struct se_portal_group *se_tpg, \
1110 const char *page, \
1111 size_t count) \
1112{ \
1113 return __iscsi_tpg_auth_store_##name(se_tpg, page, count); \
1114}
1115
1116#define DEF_TPG_AUTH_INT(name) \ 971#define DEF_TPG_AUTH_INT(name) \
1117 __DEF_TPG_AUTH_INT(tpg_auth, name) \ 972 __DEF_TPG_AUTH_INT(tpg_auth, name) \
1118static ssize_t iscsi_tpg_auth_show_##name( \ 973static ssize_t iscsi_tpg_auth_##name##_show(struct config_item *item, \
1119 struct se_portal_group *se_tpg, \ 974 char *page) \
1120 char *page) \
1121{ \ 975{ \
1122 return __iscsi_tpg_auth_show_##name(se_tpg, page); \ 976 return __iscsi_tpg_auth_##name##_show(auth_to_tpg(item), page); \
1123} 977} \
1124 978CONFIGFS_ATTR_RO(iscsi_tpg_auth_, name);
1125#define TPG_AUTH_ATTR(_name, _mode) TF_TPG_AUTH_ATTR(iscsi, _name, _mode);
1126#define TPG_AUTH_ATTR_RO(_name) TF_TPG_AUTH_ATTR_RO(iscsi, _name);
1127 979
1128/*
1129 * * One-way authentication userid
1130 * */
1131DEF_TPG_AUTH_STR(userid, NAF_USERID_SET);
1132TPG_AUTH_ATTR(userid, S_IRUGO | S_IWUSR);
1133/*
1134 * * One-way authentication password
1135 * */
1136DEF_TPG_AUTH_STR(password, NAF_PASSWORD_SET);
1137TPG_AUTH_ATTR(password, S_IRUGO | S_IWUSR);
1138/*
1139 * * Enforce mutual authentication
1140 * */
1141DEF_TPG_AUTH_INT(authenticate_target); 980DEF_TPG_AUTH_INT(authenticate_target);
1142TPG_AUTH_ATTR_RO(authenticate_target);
1143/*
1144 * * Mutual authentication userid
1145 * */
1146DEF_TPG_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
1147TPG_AUTH_ATTR(userid_mutual, S_IRUGO | S_IWUSR);
1148/*
1149 * * Mutual authentication password
1150 * */
1151DEF_TPG_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
1152TPG_AUTH_ATTR(password_mutual, S_IRUGO | S_IWUSR);
1153 981
1154static struct configfs_attribute *lio_target_tpg_auth_attrs[] = { 982static struct configfs_attribute *lio_target_tpg_auth_attrs[] = {
1155 &iscsi_tpg_auth_userid.attr, 983 &iscsi_tpg_auth_attr_userid,
1156 &iscsi_tpg_auth_password.attr, 984 &iscsi_tpg_auth_attr_password,
1157 &iscsi_tpg_auth_authenticate_target.attr, 985 &iscsi_tpg_auth_attr_authenticate_target,
1158 &iscsi_tpg_auth_userid_mutual.attr, 986 &iscsi_tpg_auth_attr_userid_mutual,
1159 &iscsi_tpg_auth_password_mutual.attr, 987 &iscsi_tpg_auth_attr_password_mutual,
1160 NULL, 988 NULL,
1161}; 989};
1162 990
@@ -1165,10 +993,10 @@ static struct configfs_attribute *lio_target_tpg_auth_attrs[] = {
1165/* Start items for lio_target_tpg_param_cit */ 993/* Start items for lio_target_tpg_param_cit */
1166 994
1167#define DEF_TPG_PARAM(name) \ 995#define DEF_TPG_PARAM(name) \
1168static ssize_t iscsi_tpg_param_show_##name( \ 996static ssize_t iscsi_tpg_param_##name##_show(struct config_item *item, \
1169 struct se_portal_group *se_tpg, \ 997 char *page) \
1170 char *page) \
1171{ \ 998{ \
999 struct se_portal_group *se_tpg = param_to_tpg(item); \
1172 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 1000 struct iscsi_portal_group *tpg = container_of(se_tpg, \
1173 struct iscsi_portal_group, tpg_se_tpg); \ 1001 struct iscsi_portal_group, tpg_se_tpg); \
1174 struct iscsi_param *param; \ 1002 struct iscsi_param *param; \
@@ -1188,11 +1016,10 @@ static ssize_t iscsi_tpg_param_show_##name( \
1188 iscsit_put_tpg(tpg); \ 1016 iscsit_put_tpg(tpg); \
1189 return rb; \ 1017 return rb; \
1190} \ 1018} \
1191static ssize_t iscsi_tpg_param_store_##name( \ 1019static ssize_t iscsi_tpg_param_##name##_store(struct config_item *item, \
1192 struct se_portal_group *se_tpg, \ 1020 const char *page, size_t count) \
1193 const char *page, \
1194 size_t count) \
1195{ \ 1021{ \
1022 struct se_portal_group *se_tpg = param_to_tpg(item); \
1196 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 1023 struct iscsi_portal_group *tpg = container_of(se_tpg, \
1197 struct iscsi_portal_group, tpg_se_tpg); \ 1024 struct iscsi_portal_group, tpg_se_tpg); \
1198 char *buf; \ 1025 char *buf; \
@@ -1220,96 +1047,54 @@ static ssize_t iscsi_tpg_param_store_##name( \
1220out: \ 1047out: \
1221 kfree(buf); \ 1048 kfree(buf); \
1222 iscsit_put_tpg(tpg); \ 1049 iscsit_put_tpg(tpg); \
1223 return -EINVAL; \ 1050 return -EINVAL; \
1224} 1051} \
1225 1052CONFIGFS_ATTR(iscsi_tpg_param_, name)
1226#define TPG_PARAM_ATTR(_name, _mode) TF_TPG_PARAM_ATTR(iscsi, _name, _mode);
1227 1053
1228DEF_TPG_PARAM(AuthMethod); 1054DEF_TPG_PARAM(AuthMethod);
1229TPG_PARAM_ATTR(AuthMethod, S_IRUGO | S_IWUSR);
1230
1231DEF_TPG_PARAM(HeaderDigest); 1055DEF_TPG_PARAM(HeaderDigest);
1232TPG_PARAM_ATTR(HeaderDigest, S_IRUGO | S_IWUSR);
1233
1234DEF_TPG_PARAM(DataDigest); 1056DEF_TPG_PARAM(DataDigest);
1235TPG_PARAM_ATTR(DataDigest, S_IRUGO | S_IWUSR);
1236
1237DEF_TPG_PARAM(MaxConnections); 1057DEF_TPG_PARAM(MaxConnections);
1238TPG_PARAM_ATTR(MaxConnections, S_IRUGO | S_IWUSR);
1239
1240DEF_TPG_PARAM(TargetAlias); 1058DEF_TPG_PARAM(TargetAlias);
1241TPG_PARAM_ATTR(TargetAlias, S_IRUGO | S_IWUSR);
1242
1243DEF_TPG_PARAM(InitialR2T); 1059DEF_TPG_PARAM(InitialR2T);
1244TPG_PARAM_ATTR(InitialR2T, S_IRUGO | S_IWUSR);
1245
1246DEF_TPG_PARAM(ImmediateData); 1060DEF_TPG_PARAM(ImmediateData);
1247TPG_PARAM_ATTR(ImmediateData, S_IRUGO | S_IWUSR);
1248
1249DEF_TPG_PARAM(MaxRecvDataSegmentLength); 1061DEF_TPG_PARAM(MaxRecvDataSegmentLength);
1250TPG_PARAM_ATTR(MaxRecvDataSegmentLength, S_IRUGO | S_IWUSR);
1251
1252DEF_TPG_PARAM(MaxXmitDataSegmentLength); 1062DEF_TPG_PARAM(MaxXmitDataSegmentLength);
1253TPG_PARAM_ATTR(MaxXmitDataSegmentLength, S_IRUGO | S_IWUSR);
1254
1255DEF_TPG_PARAM(MaxBurstLength); 1063DEF_TPG_PARAM(MaxBurstLength);
1256TPG_PARAM_ATTR(MaxBurstLength, S_IRUGO | S_IWUSR);
1257
1258DEF_TPG_PARAM(FirstBurstLength); 1064DEF_TPG_PARAM(FirstBurstLength);
1259TPG_PARAM_ATTR(FirstBurstLength, S_IRUGO | S_IWUSR);
1260
1261DEF_TPG_PARAM(DefaultTime2Wait); 1065DEF_TPG_PARAM(DefaultTime2Wait);
1262TPG_PARAM_ATTR(DefaultTime2Wait, S_IRUGO | S_IWUSR);
1263
1264DEF_TPG_PARAM(DefaultTime2Retain); 1066DEF_TPG_PARAM(DefaultTime2Retain);
1265TPG_PARAM_ATTR(DefaultTime2Retain, S_IRUGO | S_IWUSR);
1266
1267DEF_TPG_PARAM(MaxOutstandingR2T); 1067DEF_TPG_PARAM(MaxOutstandingR2T);
1268TPG_PARAM_ATTR(MaxOutstandingR2T, S_IRUGO | S_IWUSR);
1269
1270DEF_TPG_PARAM(DataPDUInOrder); 1068DEF_TPG_PARAM(DataPDUInOrder);
1271TPG_PARAM_ATTR(DataPDUInOrder, S_IRUGO | S_IWUSR);
1272
1273DEF_TPG_PARAM(DataSequenceInOrder); 1069DEF_TPG_PARAM(DataSequenceInOrder);
1274TPG_PARAM_ATTR(DataSequenceInOrder, S_IRUGO | S_IWUSR);
1275
1276DEF_TPG_PARAM(ErrorRecoveryLevel); 1070DEF_TPG_PARAM(ErrorRecoveryLevel);
1277TPG_PARAM_ATTR(ErrorRecoveryLevel, S_IRUGO | S_IWUSR);
1278
1279DEF_TPG_PARAM(IFMarker); 1071DEF_TPG_PARAM(IFMarker);
1280TPG_PARAM_ATTR(IFMarker, S_IRUGO | S_IWUSR);
1281
1282DEF_TPG_PARAM(OFMarker); 1072DEF_TPG_PARAM(OFMarker);
1283TPG_PARAM_ATTR(OFMarker, S_IRUGO | S_IWUSR);
1284
1285DEF_TPG_PARAM(IFMarkInt); 1073DEF_TPG_PARAM(IFMarkInt);
1286TPG_PARAM_ATTR(IFMarkInt, S_IRUGO | S_IWUSR);
1287
1288DEF_TPG_PARAM(OFMarkInt); 1074DEF_TPG_PARAM(OFMarkInt);
1289TPG_PARAM_ATTR(OFMarkInt, S_IRUGO | S_IWUSR);
1290 1075
1291static struct configfs_attribute *lio_target_tpg_param_attrs[] = { 1076static struct configfs_attribute *lio_target_tpg_param_attrs[] = {
1292 &iscsi_tpg_param_AuthMethod.attr, 1077 &iscsi_tpg_param_attr_AuthMethod,
1293 &iscsi_tpg_param_HeaderDigest.attr, 1078 &iscsi_tpg_param_attr_HeaderDigest,
1294 &iscsi_tpg_param_DataDigest.attr, 1079 &iscsi_tpg_param_attr_DataDigest,
1295 &iscsi_tpg_param_MaxConnections.attr, 1080 &iscsi_tpg_param_attr_MaxConnections,
1296 &iscsi_tpg_param_TargetAlias.attr, 1081 &iscsi_tpg_param_attr_TargetAlias,
1297 &iscsi_tpg_param_InitialR2T.attr, 1082 &iscsi_tpg_param_attr_InitialR2T,
1298 &iscsi_tpg_param_ImmediateData.attr, 1083 &iscsi_tpg_param_attr_ImmediateData,
1299 &iscsi_tpg_param_MaxRecvDataSegmentLength.attr, 1084 &iscsi_tpg_param_attr_MaxRecvDataSegmentLength,
1300 &iscsi_tpg_param_MaxXmitDataSegmentLength.attr, 1085 &iscsi_tpg_param_attr_MaxXmitDataSegmentLength,
1301 &iscsi_tpg_param_MaxBurstLength.attr, 1086 &iscsi_tpg_param_attr_MaxBurstLength,
1302 &iscsi_tpg_param_FirstBurstLength.attr, 1087 &iscsi_tpg_param_attr_FirstBurstLength,
1303 &iscsi_tpg_param_DefaultTime2Wait.attr, 1088 &iscsi_tpg_param_attr_DefaultTime2Wait,
1304 &iscsi_tpg_param_DefaultTime2Retain.attr, 1089 &iscsi_tpg_param_attr_DefaultTime2Retain,
1305 &iscsi_tpg_param_MaxOutstandingR2T.attr, 1090 &iscsi_tpg_param_attr_MaxOutstandingR2T,
1306 &iscsi_tpg_param_DataPDUInOrder.attr, 1091 &iscsi_tpg_param_attr_DataPDUInOrder,
1307 &iscsi_tpg_param_DataSequenceInOrder.attr, 1092 &iscsi_tpg_param_attr_DataSequenceInOrder,
1308 &iscsi_tpg_param_ErrorRecoveryLevel.attr, 1093 &iscsi_tpg_param_attr_ErrorRecoveryLevel,
1309 &iscsi_tpg_param_IFMarker.attr, 1094 &iscsi_tpg_param_attr_IFMarker,
1310 &iscsi_tpg_param_OFMarker.attr, 1095 &iscsi_tpg_param_attr_OFMarker,
1311 &iscsi_tpg_param_IFMarkInt.attr, 1096 &iscsi_tpg_param_attr_IFMarkInt,
1312 &iscsi_tpg_param_OFMarkInt.attr, 1097 &iscsi_tpg_param_attr_OFMarkInt,
1313 NULL, 1098 NULL,
1314}; 1099};
1315 1100
@@ -1317,10 +1102,9 @@ static struct configfs_attribute *lio_target_tpg_param_attrs[] = {
1317 1102
1318/* Start items for lio_target_tpg_cit */ 1103/* Start items for lio_target_tpg_cit */
1319 1104
1320static ssize_t lio_target_tpg_show_enable( 1105static ssize_t lio_target_tpg_enable_show(struct config_item *item, char *page)
1321 struct se_portal_group *se_tpg,
1322 char *page)
1323{ 1106{
1107 struct se_portal_group *se_tpg = to_tpg(item);
1324 struct iscsi_portal_group *tpg = container_of(se_tpg, 1108 struct iscsi_portal_group *tpg = container_of(se_tpg,
1325 struct iscsi_portal_group, tpg_se_tpg); 1109 struct iscsi_portal_group, tpg_se_tpg);
1326 ssize_t len; 1110 ssize_t len;
@@ -1333,11 +1117,10 @@ static ssize_t lio_target_tpg_show_enable(
1333 return len; 1117 return len;
1334} 1118}
1335 1119
1336static ssize_t lio_target_tpg_store_enable( 1120static ssize_t lio_target_tpg_enable_store(struct config_item *item,
1337 struct se_portal_group *se_tpg, 1121 const char *page, size_t count)
1338 const char *page,
1339 size_t count)
1340{ 1122{
1123 struct se_portal_group *se_tpg = to_tpg(item);
1341 struct iscsi_portal_group *tpg = container_of(se_tpg, 1124 struct iscsi_portal_group *tpg = container_of(se_tpg,
1342 struct iscsi_portal_group, tpg_se_tpg); 1125 struct iscsi_portal_group, tpg_se_tpg);
1343 u32 op; 1126 u32 op;
@@ -1375,20 +1158,19 @@ out:
1375 return -EINVAL; 1158 return -EINVAL;
1376} 1159}
1377 1160
1378TF_TPG_BASE_ATTR(lio_target, enable, S_IRUGO | S_IWUSR);
1379 1161
1380static ssize_t lio_target_tpg_show_dynamic_sessions( 1162static ssize_t lio_target_tpg_dynamic_sessions_show(struct config_item *item,
1381 struct se_portal_group *se_tpg, 1163 char *page)
1382 char *page)
1383{ 1164{
1384 return target_show_dynamic_sessions(se_tpg, page); 1165 return target_show_dynamic_sessions(to_tpg(item), page);
1385} 1166}
1386 1167
1387TF_TPG_BASE_ATTR_RO(lio_target, dynamic_sessions); 1168CONFIGFS_ATTR(lio_target_tpg_, enable);
1169CONFIGFS_ATTR_RO(lio_target_tpg_, dynamic_sessions);
1388 1170
1389static struct configfs_attribute *lio_target_tpg_attrs[] = { 1171static struct configfs_attribute *lio_target_tpg_attrs[] = {
1390 &lio_target_tpg_enable.attr, 1172 &lio_target_tpg_attr_enable,
1391 &lio_target_tpg_dynamic_sessions.attr, 1173 &lio_target_tpg_attr_dynamic_sessions,
1392 NULL, 1174 NULL,
1393}; 1175};
1394 1176
@@ -1463,17 +1245,16 @@ static void lio_target_tiqn_deltpg(struct se_portal_group *se_tpg)
1463 1245
1464/* Start LIO-Target TIQN struct contig_item lio_target_cit */ 1246/* Start LIO-Target TIQN struct contig_item lio_target_cit */
1465 1247
1466static ssize_t lio_target_wwn_show_attr_lio_version( 1248static ssize_t lio_target_wwn_lio_version_show(struct config_item *item,
1467 struct target_fabric_configfs *tf, 1249 char *page)
1468 char *page)
1469{ 1250{
1470 return sprintf(page, "Datera Inc. iSCSI Target "ISCSIT_VERSION"\n"); 1251 return sprintf(page, "Datera Inc. iSCSI Target "ISCSIT_VERSION"\n");
1471} 1252}
1472 1253
1473TF_WWN_ATTR_RO(lio_target, lio_version); 1254CONFIGFS_ATTR_RO(lio_target_wwn_, lio_version);
1474 1255
1475static struct configfs_attribute *lio_target_wwn_attrs[] = { 1256static struct configfs_attribute *lio_target_wwn_attrs[] = {
1476 &lio_target_wwn_lio_version.attr, 1257 &lio_target_wwn_attr_lio_version,
1477 NULL, 1258 NULL,
1478}; 1259};
1479 1260
@@ -1552,77 +1333,47 @@ static void lio_target_call_coredeltiqn(
1552 1333
1553#define DEF_DISC_AUTH_STR(name, flags) \ 1334#define DEF_DISC_AUTH_STR(name, flags) \
1554 __DEF_NACL_AUTH_STR(disc, name, flags) \ 1335 __DEF_NACL_AUTH_STR(disc, name, flags) \
1555static ssize_t iscsi_disc_show_##name( \ 1336static ssize_t iscsi_disc_##name##_show(struct config_item *item, char *page) \
1556 struct target_fabric_configfs *tf, \
1557 char *page) \
1558{ \ 1337{ \
1559 return __iscsi_disc_show_##name(&iscsit_global->discovery_acl, \ 1338 return __iscsi_disc_##name##_show(&iscsit_global->discovery_acl,\
1560 page); \ 1339 page); \
1561} \ 1340} \
1562static ssize_t iscsi_disc_store_##name( \ 1341static ssize_t iscsi_disc_##name##_store(struct config_item *item, \
1563 struct target_fabric_configfs *tf, \ 1342 const char *page, size_t count) \
1564 const char *page, \
1565 size_t count) \
1566{ \ 1343{ \
1567 return __iscsi_disc_store_##name(&iscsit_global->discovery_acl, \ 1344 return __iscsi_disc_##name##_store(&iscsit_global->discovery_acl, \
1568 page, count); \ 1345 page, count); \
1569} 1346 \
1347} \
1348CONFIGFS_ATTR(iscsi_disc_, name)
1349
1350DEF_DISC_AUTH_STR(userid, NAF_USERID_SET);
1351DEF_DISC_AUTH_STR(password, NAF_PASSWORD_SET);
1352DEF_DISC_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
1353DEF_DISC_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
1570 1354
1571#define DEF_DISC_AUTH_INT(name) \ 1355#define DEF_DISC_AUTH_INT(name) \
1572 __DEF_NACL_AUTH_INT(disc, name) \ 1356 __DEF_NACL_AUTH_INT(disc, name) \
1573static ssize_t iscsi_disc_show_##name( \ 1357static ssize_t iscsi_disc_##name##_show(struct config_item *item, char *page) \
1574 struct target_fabric_configfs *tf, \
1575 char *page) \
1576{ \ 1358{ \
1577 return __iscsi_disc_show_##name(&iscsit_global->discovery_acl, \ 1359 return __iscsi_disc_##name##_show(&iscsit_global->discovery_acl, \
1578 page); \ 1360 page); \
1579} 1361} \
1580 1362CONFIGFS_ATTR_RO(iscsi_disc_, name)
1581#define DISC_AUTH_ATTR(_name, _mode) TF_DISC_ATTR(iscsi, _name, _mode)
1582#define DISC_AUTH_ATTR_RO(_name) TF_DISC_ATTR_RO(iscsi, _name)
1583 1363
1584/*
1585 * One-way authentication userid
1586 */
1587DEF_DISC_AUTH_STR(userid, NAF_USERID_SET);
1588DISC_AUTH_ATTR(userid, S_IRUGO | S_IWUSR);
1589/*
1590 * One-way authentication password
1591 */
1592DEF_DISC_AUTH_STR(password, NAF_PASSWORD_SET);
1593DISC_AUTH_ATTR(password, S_IRUGO | S_IWUSR);
1594/*
1595 * Enforce mutual authentication
1596 */
1597DEF_DISC_AUTH_INT(authenticate_target); 1364DEF_DISC_AUTH_INT(authenticate_target);
1598DISC_AUTH_ATTR_RO(authenticate_target);
1599/*
1600 * Mutual authentication userid
1601 */
1602DEF_DISC_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
1603DISC_AUTH_ATTR(userid_mutual, S_IRUGO | S_IWUSR);
1604/*
1605 * Mutual authentication password
1606 */
1607DEF_DISC_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
1608DISC_AUTH_ATTR(password_mutual, S_IRUGO | S_IWUSR);
1609 1365
1610/* 1366
1611 * enforce_discovery_auth 1367static ssize_t iscsi_disc_enforce_discovery_auth_show(struct config_item *item,
1612 */ 1368 char *page)
1613static ssize_t iscsi_disc_show_enforce_discovery_auth(
1614 struct target_fabric_configfs *tf,
1615 char *page)
1616{ 1369{
1617 struct iscsi_node_auth *discovery_auth = &iscsit_global->discovery_acl.node_auth; 1370 struct iscsi_node_auth *discovery_auth = &iscsit_global->discovery_acl.node_auth;
1618 1371
1619 return sprintf(page, "%d\n", discovery_auth->enforce_discovery_auth); 1372 return sprintf(page, "%d\n", discovery_auth->enforce_discovery_auth);
1620} 1373}
1621 1374
1622static ssize_t iscsi_disc_store_enforce_discovery_auth( 1375static ssize_t iscsi_disc_enforce_discovery_auth_store(struct config_item *item,
1623 struct target_fabric_configfs *tf, 1376 const char *page, size_t count)
1624 const char *page,
1625 size_t count)
1626{ 1377{
1627 struct iscsi_param *param; 1378 struct iscsi_param *param;
1628 struct iscsi_portal_group *discovery_tpg = iscsit_global->discovery_tpg; 1379 struct iscsi_portal_group *discovery_tpg = iscsit_global->discovery_tpg;
@@ -1677,15 +1428,15 @@ static ssize_t iscsi_disc_store_enforce_discovery_auth(
1677 return count; 1428 return count;
1678} 1429}
1679 1430
1680DISC_AUTH_ATTR(enforce_discovery_auth, S_IRUGO | S_IWUSR); 1431CONFIGFS_ATTR(iscsi_disc_, enforce_discovery_auth);
1681 1432
1682static struct configfs_attribute *lio_target_discovery_auth_attrs[] = { 1433static struct configfs_attribute *lio_target_discovery_auth_attrs[] = {
1683 &iscsi_disc_userid.attr, 1434 &iscsi_disc_attr_userid,
1684 &iscsi_disc_password.attr, 1435 &iscsi_disc_attr_password,
1685 &iscsi_disc_authenticate_target.attr, 1436 &iscsi_disc_attr_authenticate_target,
1686 &iscsi_disc_userid_mutual.attr, 1437 &iscsi_disc_attr_userid_mutual,
1687 &iscsi_disc_password_mutual.attr, 1438 &iscsi_disc_attr_password_mutual,
1688 &iscsi_disc_enforce_discovery_auth.attr, 1439 &iscsi_disc_attr_enforce_discovery_auth,
1689 NULL, 1440 NULL,
1690}; 1441};
1691 1442
diff --git a/drivers/target/iscsi/iscsi_target_stat.c b/drivers/target/iscsi/iscsi_target_stat.c
index 9dd94ff0b62c..411cb266a47d 100644
--- a/drivers/target/iscsi/iscsi_target_stat.c
+++ b/drivers/target/iscsi/iscsi_target_stat.c
@@ -21,7 +21,6 @@
21#include <linux/export.h> 21#include <linux/export.h>
22#include <scsi/iscsi_proto.h> 22#include <scsi/iscsi_proto.h>
23#include <target/target_core_base.h> 23#include <target/target_core_base.h>
24#include <target/configfs_macros.h>
25 24
26#include <target/iscsi/iscsi_target_core.h> 25#include <target/iscsi/iscsi_target_core.h>
27#include "iscsi_target_parameters.h" 26#include "iscsi_target_parameters.h"
@@ -50,76 +49,56 @@
50/* 49/*
51 * Instance Attributes Table 50 * Instance Attributes Table
52 */ 51 */
53CONFIGFS_EATTR_STRUCT(iscsi_stat_instance, iscsi_wwn_stat_grps); 52static struct iscsi_tiqn *iscsi_instance_tiqn(struct config_item *item)
54#define ISCSI_STAT_INSTANCE_ATTR(_name, _mode) \ 53{
55static struct iscsi_stat_instance_attribute \ 54 struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
56 iscsi_stat_instance_##_name = \ 55 struct iscsi_wwn_stat_grps, iscsi_instance_group);
57 __CONFIGFS_EATTR(_name, _mode, \ 56 return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
58 iscsi_stat_instance_show_attr_##_name, \ 57}
59 iscsi_stat_instance_store_attr_##_name);
60
61#define ISCSI_STAT_INSTANCE_ATTR_RO(_name) \
62static struct iscsi_stat_instance_attribute \
63 iscsi_stat_instance_##_name = \
64 __CONFIGFS_EATTR_RO(_name, \
65 iscsi_stat_instance_show_attr_##_name);
66
67static ssize_t iscsi_stat_instance_show_attr_inst(
68 struct iscsi_wwn_stat_grps *igrps, char *page)
69{
70 struct iscsi_tiqn *tiqn = container_of(igrps,
71 struct iscsi_tiqn, tiqn_stat_grps);
72 58
73 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 59static ssize_t iscsi_stat_instance_inst_show(struct config_item *item,
60 char *page)
61{
62 return snprintf(page, PAGE_SIZE, "%u\n",
63 iscsi_instance_tiqn(item)->tiqn_index);
74} 64}
75ISCSI_STAT_INSTANCE_ATTR_RO(inst);
76 65
77static ssize_t iscsi_stat_instance_show_attr_min_ver( 66static ssize_t iscsi_stat_instance_min_ver_show(struct config_item *item,
78 struct iscsi_wwn_stat_grps *igrps, char *page) 67 char *page)
79{ 68{
80 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION); 69 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION);
81} 70}
82ISCSI_STAT_INSTANCE_ATTR_RO(min_ver);
83 71
84static ssize_t iscsi_stat_instance_show_attr_max_ver( 72static ssize_t iscsi_stat_instance_max_ver_show(struct config_item *item,
85 struct iscsi_wwn_stat_grps *igrps, char *page) 73 char *page)
86{ 74{
87 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION); 75 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION);
88} 76}
89ISCSI_STAT_INSTANCE_ATTR_RO(max_ver);
90 77
91static ssize_t iscsi_stat_instance_show_attr_portals( 78static ssize_t iscsi_stat_instance_portals_show(struct config_item *item,
92 struct iscsi_wwn_stat_grps *igrps, char *page) 79 char *page)
93{ 80{
94 struct iscsi_tiqn *tiqn = container_of(igrps, 81 return snprintf(page, PAGE_SIZE, "%u\n",
95 struct iscsi_tiqn, tiqn_stat_grps); 82 iscsi_instance_tiqn(item)->tiqn_num_tpg_nps);
96
97 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_num_tpg_nps);
98} 83}
99ISCSI_STAT_INSTANCE_ATTR_RO(portals);
100 84
101static ssize_t iscsi_stat_instance_show_attr_nodes( 85static ssize_t iscsi_stat_instance_nodes_show(struct config_item *item,
102 struct iscsi_wwn_stat_grps *igrps, char *page) 86 char *page)
103{ 87{
104 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_INST_NUM_NODES); 88 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_INST_NUM_NODES);
105} 89}
106ISCSI_STAT_INSTANCE_ATTR_RO(nodes);
107 90
108static ssize_t iscsi_stat_instance_show_attr_sessions( 91static ssize_t iscsi_stat_instance_sessions_show(struct config_item *item,
109 struct iscsi_wwn_stat_grps *igrps, char *page) 92 char *page)
110{ 93{
111 struct iscsi_tiqn *tiqn = container_of(igrps, 94 return snprintf(page, PAGE_SIZE, "%u\n",
112 struct iscsi_tiqn, tiqn_stat_grps); 95 iscsi_instance_tiqn(item)->tiqn_nsessions);
113
114 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_nsessions);
115} 96}
116ISCSI_STAT_INSTANCE_ATTR_RO(sessions);
117 97
118static ssize_t iscsi_stat_instance_show_attr_fail_sess( 98static ssize_t iscsi_stat_instance_fail_sess_show(struct config_item *item,
119 struct iscsi_wwn_stat_grps *igrps, char *page) 99 char *page)
120{ 100{
121 struct iscsi_tiqn *tiqn = container_of(igrps, 101 struct iscsi_tiqn *tiqn = iscsi_instance_tiqn(item);
122 struct iscsi_tiqn, tiqn_stat_grps);
123 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 102 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
124 u32 sess_err_count; 103 u32 sess_err_count;
125 104
@@ -131,88 +110,84 @@ static ssize_t iscsi_stat_instance_show_attr_fail_sess(
131 110
132 return snprintf(page, PAGE_SIZE, "%u\n", sess_err_count); 111 return snprintf(page, PAGE_SIZE, "%u\n", sess_err_count);
133} 112}
134ISCSI_STAT_INSTANCE_ATTR_RO(fail_sess);
135 113
136static ssize_t iscsi_stat_instance_show_attr_fail_type( 114static ssize_t iscsi_stat_instance_fail_type_show(struct config_item *item,
137 struct iscsi_wwn_stat_grps *igrps, char *page) 115 char *page)
138{ 116{
139 struct iscsi_tiqn *tiqn = container_of(igrps, 117 struct iscsi_tiqn *tiqn = iscsi_instance_tiqn(item);
140 struct iscsi_tiqn, tiqn_stat_grps);
141 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 118 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
142 119
143 return snprintf(page, PAGE_SIZE, "%u\n", 120 return snprintf(page, PAGE_SIZE, "%u\n",
144 sess_err->last_sess_failure_type); 121 sess_err->last_sess_failure_type);
145} 122}
146ISCSI_STAT_INSTANCE_ATTR_RO(fail_type);
147 123
148static ssize_t iscsi_stat_instance_show_attr_fail_rem_name( 124static ssize_t iscsi_stat_instance_fail_rem_name_show(struct config_item *item,
149 struct iscsi_wwn_stat_grps *igrps, char *page) 125 char *page)
150{ 126{
151 struct iscsi_tiqn *tiqn = container_of(igrps, 127 struct iscsi_tiqn *tiqn = iscsi_instance_tiqn(item);
152 struct iscsi_tiqn, tiqn_stat_grps);
153 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 128 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
154 129
155 return snprintf(page, PAGE_SIZE, "%s\n", 130 return snprintf(page, PAGE_SIZE, "%s\n",
156 sess_err->last_sess_fail_rem_name[0] ? 131 sess_err->last_sess_fail_rem_name[0] ?
157 sess_err->last_sess_fail_rem_name : NONE); 132 sess_err->last_sess_fail_rem_name : NONE);
158} 133}
159ISCSI_STAT_INSTANCE_ATTR_RO(fail_rem_name);
160 134
161static ssize_t iscsi_stat_instance_show_attr_disc_time( 135static ssize_t iscsi_stat_instance_disc_time_show(struct config_item *item,
162 struct iscsi_wwn_stat_grps *igrps, char *page) 136 char *page)
163{ 137{
164 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DISCONTINUITY_TIME); 138 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DISCONTINUITY_TIME);
165} 139}
166ISCSI_STAT_INSTANCE_ATTR_RO(disc_time);
167 140
168static ssize_t iscsi_stat_instance_show_attr_description( 141static ssize_t iscsi_stat_instance_description_show(struct config_item *item,
169 struct iscsi_wwn_stat_grps *igrps, char *page) 142 char *page)
170{ 143{
171 return snprintf(page, PAGE_SIZE, "%s\n", ISCSI_INST_DESCR); 144 return snprintf(page, PAGE_SIZE, "%s\n", ISCSI_INST_DESCR);
172} 145}
173ISCSI_STAT_INSTANCE_ATTR_RO(description);
174 146
175static ssize_t iscsi_stat_instance_show_attr_vendor( 147static ssize_t iscsi_stat_instance_vendor_show(struct config_item *item,
176 struct iscsi_wwn_stat_grps *igrps, char *page) 148 char *page)
177{ 149{
178 return snprintf(page, PAGE_SIZE, "Datera, Inc. iSCSI-Target\n"); 150 return snprintf(page, PAGE_SIZE, "Datera, Inc. iSCSI-Target\n");
179} 151}
180ISCSI_STAT_INSTANCE_ATTR_RO(vendor);
181 152
182static ssize_t iscsi_stat_instance_show_attr_version( 153static ssize_t iscsi_stat_instance_version_show(struct config_item *item,
183 struct iscsi_wwn_stat_grps *igrps, char *page) 154 char *page)
184{ 155{
185 return snprintf(page, PAGE_SIZE, "%s\n", ISCSIT_VERSION); 156 return snprintf(page, PAGE_SIZE, "%s\n", ISCSIT_VERSION);
186} 157}
187ISCSI_STAT_INSTANCE_ATTR_RO(version);
188 158
189CONFIGFS_EATTR_OPS(iscsi_stat_instance, iscsi_wwn_stat_grps, 159CONFIGFS_ATTR_RO(iscsi_stat_instance_, inst);
190 iscsi_instance_group); 160CONFIGFS_ATTR_RO(iscsi_stat_instance_, min_ver);
161CONFIGFS_ATTR_RO(iscsi_stat_instance_, max_ver);
162CONFIGFS_ATTR_RO(iscsi_stat_instance_, portals);
163CONFIGFS_ATTR_RO(iscsi_stat_instance_, nodes);
164CONFIGFS_ATTR_RO(iscsi_stat_instance_, sessions);
165CONFIGFS_ATTR_RO(iscsi_stat_instance_, fail_sess);
166CONFIGFS_ATTR_RO(iscsi_stat_instance_, fail_type);
167CONFIGFS_ATTR_RO(iscsi_stat_instance_, fail_rem_name);
168CONFIGFS_ATTR_RO(iscsi_stat_instance_, disc_time);
169CONFIGFS_ATTR_RO(iscsi_stat_instance_, description);
170CONFIGFS_ATTR_RO(iscsi_stat_instance_, vendor);
171CONFIGFS_ATTR_RO(iscsi_stat_instance_, version);
191 172
192static struct configfs_attribute *iscsi_stat_instance_attrs[] = { 173static struct configfs_attribute *iscsi_stat_instance_attrs[] = {
193 &iscsi_stat_instance_inst.attr, 174 &iscsi_stat_instance_attr_inst,
194 &iscsi_stat_instance_min_ver.attr, 175 &iscsi_stat_instance_attr_min_ver,
195 &iscsi_stat_instance_max_ver.attr, 176 &iscsi_stat_instance_attr_max_ver,
196 &iscsi_stat_instance_portals.attr, 177 &iscsi_stat_instance_attr_portals,
197 &iscsi_stat_instance_nodes.attr, 178 &iscsi_stat_instance_attr_nodes,
198 &iscsi_stat_instance_sessions.attr, 179 &iscsi_stat_instance_attr_sessions,
199 &iscsi_stat_instance_fail_sess.attr, 180 &iscsi_stat_instance_attr_fail_sess,
200 &iscsi_stat_instance_fail_type.attr, 181 &iscsi_stat_instance_attr_fail_type,
201 &iscsi_stat_instance_fail_rem_name.attr, 182 &iscsi_stat_instance_attr_fail_rem_name,
202 &iscsi_stat_instance_disc_time.attr, 183 &iscsi_stat_instance_attr_disc_time,
203 &iscsi_stat_instance_description.attr, 184 &iscsi_stat_instance_attr_description,
204 &iscsi_stat_instance_vendor.attr, 185 &iscsi_stat_instance_attr_vendor,
205 &iscsi_stat_instance_version.attr, 186 &iscsi_stat_instance_attr_version,
206 NULL, 187 NULL,
207}; 188};
208 189
209static struct configfs_item_operations iscsi_stat_instance_item_ops = {
210 .show_attribute = iscsi_stat_instance_attr_show,
211 .store_attribute = iscsi_stat_instance_attr_store,
212};
213
214struct config_item_type iscsi_stat_instance_cit = { 190struct config_item_type iscsi_stat_instance_cit = {
215 .ct_item_ops = &iscsi_stat_instance_item_ops,
216 .ct_attrs = iscsi_stat_instance_attrs, 191 .ct_attrs = iscsi_stat_instance_attrs,
217 .ct_owner = THIS_MODULE, 192 .ct_owner = THIS_MODULE,
218}; 193};
@@ -220,81 +195,61 @@ struct config_item_type iscsi_stat_instance_cit = {
220/* 195/*
221 * Instance Session Failure Stats Table 196 * Instance Session Failure Stats Table
222 */ 197 */
223CONFIGFS_EATTR_STRUCT(iscsi_stat_sess_err, iscsi_wwn_stat_grps); 198static struct iscsi_tiqn *iscsi_sess_err_tiqn(struct config_item *item)
224#define ISCSI_STAT_SESS_ERR_ATTR(_name, _mode) \ 199{
225static struct iscsi_stat_sess_err_attribute \ 200 struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
226 iscsi_stat_sess_err_##_name = \ 201 struct iscsi_wwn_stat_grps, iscsi_sess_err_group);
227 __CONFIGFS_EATTR(_name, _mode, \ 202 return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
228 iscsi_stat_sess_err_show_attr_##_name, \ 203}
229 iscsi_stat_sess_err_store_attr_##_name);
230
231#define ISCSI_STAT_SESS_ERR_ATTR_RO(_name) \
232static struct iscsi_stat_sess_err_attribute \
233 iscsi_stat_sess_err_##_name = \
234 __CONFIGFS_EATTR_RO(_name, \
235 iscsi_stat_sess_err_show_attr_##_name);
236
237static ssize_t iscsi_stat_sess_err_show_attr_inst(
238 struct iscsi_wwn_stat_grps *igrps, char *page)
239{
240 struct iscsi_tiqn *tiqn = container_of(igrps,
241 struct iscsi_tiqn, tiqn_stat_grps);
242 204
243 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 205static ssize_t iscsi_stat_sess_err_inst_show(struct config_item *item,
206 char *page)
207{
208 return snprintf(page, PAGE_SIZE, "%u\n",
209 iscsi_sess_err_tiqn(item)->tiqn_index);
244} 210}
245ISCSI_STAT_SESS_ERR_ATTR_RO(inst);
246 211
247static ssize_t iscsi_stat_sess_err_show_attr_digest_errors( 212static ssize_t iscsi_stat_sess_err_digest_errors_show(struct config_item *item,
248 struct iscsi_wwn_stat_grps *igrps, char *page) 213 char *page)
249{ 214{
250 struct iscsi_tiqn *tiqn = container_of(igrps, 215 struct iscsi_tiqn *tiqn = iscsi_sess_err_tiqn(item);
251 struct iscsi_tiqn, tiqn_stat_grps);
252 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 216 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
253 217
254 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->digest_errors); 218 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->digest_errors);
255} 219}
256ISCSI_STAT_SESS_ERR_ATTR_RO(digest_errors);
257 220
258static ssize_t iscsi_stat_sess_err_show_attr_cxn_errors( 221static ssize_t iscsi_stat_sess_err_cxn_errors_show(struct config_item *item,
259 struct iscsi_wwn_stat_grps *igrps, char *page) 222 char *page)
260{ 223{
261 struct iscsi_tiqn *tiqn = container_of(igrps, 224 struct iscsi_tiqn *tiqn = iscsi_sess_err_tiqn(item);
262 struct iscsi_tiqn, tiqn_stat_grps);
263 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 225 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
264 226
265 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->cxn_timeout_errors); 227 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->cxn_timeout_errors);
266} 228}
267ISCSI_STAT_SESS_ERR_ATTR_RO(cxn_errors);
268 229
269static ssize_t iscsi_stat_sess_err_show_attr_format_errors( 230static ssize_t iscsi_stat_sess_err_format_errors_show(struct config_item *item,
270 struct iscsi_wwn_stat_grps *igrps, char *page) 231 char *page)
271{ 232{
272 struct iscsi_tiqn *tiqn = container_of(igrps, 233 struct iscsi_tiqn *tiqn = iscsi_sess_err_tiqn(item);
273 struct iscsi_tiqn, tiqn_stat_grps);
274 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 234 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
275 235
276 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->pdu_format_errors); 236 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->pdu_format_errors);
277} 237}
278ISCSI_STAT_SESS_ERR_ATTR_RO(format_errors);
279 238
280CONFIGFS_EATTR_OPS(iscsi_stat_sess_err, iscsi_wwn_stat_grps, 239CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, inst);
281 iscsi_sess_err_group); 240CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, digest_errors);
241CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, cxn_errors);
242CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, format_errors);
282 243
283static struct configfs_attribute *iscsi_stat_sess_err_attrs[] = { 244static struct configfs_attribute *iscsi_stat_sess_err_attrs[] = {
284 &iscsi_stat_sess_err_inst.attr, 245 &iscsi_stat_sess_err_attr_inst,
285 &iscsi_stat_sess_err_digest_errors.attr, 246 &iscsi_stat_sess_err_attr_digest_errors,
286 &iscsi_stat_sess_err_cxn_errors.attr, 247 &iscsi_stat_sess_err_attr_cxn_errors,
287 &iscsi_stat_sess_err_format_errors.attr, 248 &iscsi_stat_sess_err_attr_format_errors,
288 NULL, 249 NULL,
289}; 250};
290 251
291static struct configfs_item_operations iscsi_stat_sess_err_item_ops = {
292 .show_attribute = iscsi_stat_sess_err_attr_show,
293 .store_attribute = iscsi_stat_sess_err_attr_store,
294};
295
296struct config_item_type iscsi_stat_sess_err_cit = { 252struct config_item_type iscsi_stat_sess_err_cit = {
297 .ct_item_ops = &iscsi_stat_sess_err_item_ops,
298 .ct_attrs = iscsi_stat_sess_err_attrs, 253 .ct_attrs = iscsi_stat_sess_err_attrs,
299 .ct_owner = THIS_MODULE, 254 .ct_owner = THIS_MODULE,
300}; 255};
@@ -302,42 +257,30 @@ struct config_item_type iscsi_stat_sess_err_cit = {
302/* 257/*
303 * Target Attributes Table 258 * Target Attributes Table
304 */ 259 */
305CONFIGFS_EATTR_STRUCT(iscsi_stat_tgt_attr, iscsi_wwn_stat_grps); 260static struct iscsi_tiqn *iscsi_tgt_attr_tiqn(struct config_item *item)
306#define ISCSI_STAT_TGT_ATTR(_name, _mode) \ 261{
307static struct iscsi_stat_tgt_attr_attribute \ 262 struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
308 iscsi_stat_tgt_attr_##_name = \ 263 struct iscsi_wwn_stat_grps, iscsi_tgt_attr_group);
309 __CONFIGFS_EATTR(_name, _mode, \ 264 return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
310 iscsi_stat_tgt-attr_show_attr_##_name, \ 265}
311 iscsi_stat_tgt_attr_store_attr_##_name);
312
313#define ISCSI_STAT_TGT_ATTR_RO(_name) \
314static struct iscsi_stat_tgt_attr_attribute \
315 iscsi_stat_tgt_attr_##_name = \
316 __CONFIGFS_EATTR_RO(_name, \
317 iscsi_stat_tgt_attr_show_attr_##_name);
318
319static ssize_t iscsi_stat_tgt_attr_show_attr_inst(
320 struct iscsi_wwn_stat_grps *igrps, char *page)
321{
322 struct iscsi_tiqn *tiqn = container_of(igrps,
323 struct iscsi_tiqn, tiqn_stat_grps);
324 266
325 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 267static ssize_t iscsi_stat_tgt_attr_inst_show(struct config_item *item,
268 char *page)
269{
270 return snprintf(page, PAGE_SIZE, "%u\n",
271 iscsi_tgt_attr_tiqn(item)->tiqn_index);
326} 272}
327ISCSI_STAT_TGT_ATTR_RO(inst);
328 273
329static ssize_t iscsi_stat_tgt_attr_show_attr_indx( 274static ssize_t iscsi_stat_tgt_attr_indx_show(struct config_item *item,
330 struct iscsi_wwn_stat_grps *igrps, char *page) 275 char *page)
331{ 276{
332 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX); 277 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX);
333} 278}
334ISCSI_STAT_TGT_ATTR_RO(indx);
335 279
336static ssize_t iscsi_stat_tgt_attr_show_attr_login_fails( 280static ssize_t iscsi_stat_tgt_attr_login_fails_show(struct config_item *item,
337 struct iscsi_wwn_stat_grps *igrps, char *page) 281 char *page)
338{ 282{
339 struct iscsi_tiqn *tiqn = container_of(igrps, 283 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
340 struct iscsi_tiqn, tiqn_stat_grps);
341 struct iscsi_login_stats *lstat = &tiqn->login_stats; 284 struct iscsi_login_stats *lstat = &tiqn->login_stats;
342 u32 fail_count; 285 u32 fail_count;
343 286
@@ -349,13 +292,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_login_fails(
349 292
350 return snprintf(page, PAGE_SIZE, "%u\n", fail_count); 293 return snprintf(page, PAGE_SIZE, "%u\n", fail_count);
351} 294}
352ISCSI_STAT_TGT_ATTR_RO(login_fails);
353 295
354static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_time( 296static ssize_t iscsi_stat_tgt_attr_last_fail_time_show(struct config_item *item,
355 struct iscsi_wwn_stat_grps *igrps, char *page) 297 char *page)
356{ 298{
357 struct iscsi_tiqn *tiqn = container_of(igrps, 299 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
358 struct iscsi_tiqn, tiqn_stat_grps);
359 struct iscsi_login_stats *lstat = &tiqn->login_stats; 300 struct iscsi_login_stats *lstat = &tiqn->login_stats;
360 u32 last_fail_time; 301 u32 last_fail_time;
361 302
@@ -367,13 +308,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_time(
367 308
368 return snprintf(page, PAGE_SIZE, "%u\n", last_fail_time); 309 return snprintf(page, PAGE_SIZE, "%u\n", last_fail_time);
369} 310}
370ISCSI_STAT_TGT_ATTR_RO(last_fail_time);
371 311
372static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_type( 312static ssize_t iscsi_stat_tgt_attr_last_fail_type_show(struct config_item *item,
373 struct iscsi_wwn_stat_grps *igrps, char *page) 313 char *page)
374{ 314{
375 struct iscsi_tiqn *tiqn = container_of(igrps, 315 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
376 struct iscsi_tiqn, tiqn_stat_grps);
377 struct iscsi_login_stats *lstat = &tiqn->login_stats; 316 struct iscsi_login_stats *lstat = &tiqn->login_stats;
378 u32 last_fail_type; 317 u32 last_fail_type;
379 318
@@ -383,13 +322,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_type(
383 322
384 return snprintf(page, PAGE_SIZE, "%u\n", last_fail_type); 323 return snprintf(page, PAGE_SIZE, "%u\n", last_fail_type);
385} 324}
386ISCSI_STAT_TGT_ATTR_RO(last_fail_type);
387 325
388static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_name( 326static ssize_t iscsi_stat_tgt_attr_fail_intr_name_show(struct config_item *item,
389 struct iscsi_wwn_stat_grps *igrps, char *page) 327 char *page)
390{ 328{
391 struct iscsi_tiqn *tiqn = container_of(igrps, 329 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
392 struct iscsi_tiqn, tiqn_stat_grps);
393 struct iscsi_login_stats *lstat = &tiqn->login_stats; 330 struct iscsi_login_stats *lstat = &tiqn->login_stats;
394 unsigned char buf[224]; 331 unsigned char buf[224];
395 332
@@ -400,13 +337,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_name(
400 337
401 return snprintf(page, PAGE_SIZE, "%s\n", buf); 338 return snprintf(page, PAGE_SIZE, "%s\n", buf);
402} 339}
403ISCSI_STAT_TGT_ATTR_RO(fail_intr_name);
404 340
405static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr_type( 341static ssize_t iscsi_stat_tgt_attr_fail_intr_addr_type_show(struct config_item *item,
406 struct iscsi_wwn_stat_grps *igrps, char *page) 342 char *page)
407{ 343{
408 struct iscsi_tiqn *tiqn = container_of(igrps, 344 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
409 struct iscsi_tiqn, tiqn_stat_grps);
410 struct iscsi_login_stats *lstat = &tiqn->login_stats; 345 struct iscsi_login_stats *lstat = &tiqn->login_stats;
411 int ret; 346 int ret;
412 347
@@ -419,13 +354,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr_type(
419 354
420 return ret; 355 return ret;
421} 356}
422ISCSI_STAT_TGT_ATTR_RO(fail_intr_addr_type);
423 357
424static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr( 358static ssize_t iscsi_stat_tgt_attr_fail_intr_addr_show(struct config_item *item,
425 struct iscsi_wwn_stat_grps *igrps, char *page) 359 char *page)
426{ 360{
427 struct iscsi_tiqn *tiqn = container_of(igrps, 361 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
428 struct iscsi_tiqn, tiqn_stat_grps);
429 struct iscsi_login_stats *lstat = &tiqn->login_stats; 362 struct iscsi_login_stats *lstat = &tiqn->login_stats;
430 int ret; 363 int ret;
431 364
@@ -435,30 +368,29 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr(
435 368
436 return ret; 369 return ret;
437} 370}
438ISCSI_STAT_TGT_ATTR_RO(fail_intr_addr);
439 371
440CONFIGFS_EATTR_OPS(iscsi_stat_tgt_attr, iscsi_wwn_stat_grps, 372CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, inst);
441 iscsi_tgt_attr_group); 373CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, indx);
374CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, login_fails);
375CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, last_fail_time);
376CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, last_fail_type);
377CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, fail_intr_name);
378CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, fail_intr_addr_type);
379CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, fail_intr_addr);
442 380
443static struct configfs_attribute *iscsi_stat_tgt_attr_attrs[] = { 381static struct configfs_attribute *iscsi_stat_tgt_attr_attrs[] = {
444 &iscsi_stat_tgt_attr_inst.attr, 382 &iscsi_stat_tgt_attr_attr_inst,
445 &iscsi_stat_tgt_attr_indx.attr, 383 &iscsi_stat_tgt_attr_attr_indx,
446 &iscsi_stat_tgt_attr_login_fails.attr, 384 &iscsi_stat_tgt_attr_attr_login_fails,
447 &iscsi_stat_tgt_attr_last_fail_time.attr, 385 &iscsi_stat_tgt_attr_attr_last_fail_time,
448 &iscsi_stat_tgt_attr_last_fail_type.attr, 386 &iscsi_stat_tgt_attr_attr_last_fail_type,
449 &iscsi_stat_tgt_attr_fail_intr_name.attr, 387 &iscsi_stat_tgt_attr_attr_fail_intr_name,
450 &iscsi_stat_tgt_attr_fail_intr_addr_type.attr, 388 &iscsi_stat_tgt_attr_attr_fail_intr_addr_type,
451 &iscsi_stat_tgt_attr_fail_intr_addr.attr, 389 &iscsi_stat_tgt_attr_attr_fail_intr_addr,
452 NULL, 390 NULL,
453}; 391};
454 392
455static struct configfs_item_operations iscsi_stat_tgt_attr_item_ops = {
456 .show_attribute = iscsi_stat_tgt_attr_attr_show,
457 .store_attribute = iscsi_stat_tgt_attr_attr_store,
458};
459
460struct config_item_type iscsi_stat_tgt_attr_cit = { 393struct config_item_type iscsi_stat_tgt_attr_cit = {
461 .ct_item_ops = &iscsi_stat_tgt_attr_item_ops,
462 .ct_attrs = iscsi_stat_tgt_attr_attrs, 394 .ct_attrs = iscsi_stat_tgt_attr_attrs,
463 .ct_owner = THIS_MODULE, 395 .ct_owner = THIS_MODULE,
464}; 396};
@@ -466,42 +398,29 @@ struct config_item_type iscsi_stat_tgt_attr_cit = {
466/* 398/*
467 * Target Login Stats Table 399 * Target Login Stats Table
468 */ 400 */
469CONFIGFS_EATTR_STRUCT(iscsi_stat_login, iscsi_wwn_stat_grps); 401static struct iscsi_tiqn *iscsi_login_stat_tiqn(struct config_item *item)
470#define ISCSI_STAT_LOGIN(_name, _mode) \ 402{
471static struct iscsi_stat_login_attribute \ 403 struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
472 iscsi_stat_login_##_name = \ 404 struct iscsi_wwn_stat_grps, iscsi_login_stats_group);
473 __CONFIGFS_EATTR(_name, _mode, \ 405 return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
474 iscsi_stat_login_show_attr_##_name, \ 406}
475 iscsi_stat_login_store_attr_##_name);
476
477#define ISCSI_STAT_LOGIN_RO(_name) \
478static struct iscsi_stat_login_attribute \
479 iscsi_stat_login_##_name = \
480 __CONFIGFS_EATTR_RO(_name, \
481 iscsi_stat_login_show_attr_##_name);
482
483static ssize_t iscsi_stat_login_show_attr_inst(
484 struct iscsi_wwn_stat_grps *igrps, char *page)
485{
486 struct iscsi_tiqn *tiqn = container_of(igrps,
487 struct iscsi_tiqn, tiqn_stat_grps);
488 407
489 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 408static ssize_t iscsi_stat_login_inst_show(struct config_item *item, char *page)
409{
410 return snprintf(page, PAGE_SIZE, "%u\n",
411 iscsi_login_stat_tiqn(item)->tiqn_index);
490} 412}
491ISCSI_STAT_LOGIN_RO(inst);
492 413
493static ssize_t iscsi_stat_login_show_attr_indx( 414static ssize_t iscsi_stat_login_indx_show(struct config_item *item,
494 struct iscsi_wwn_stat_grps *igrps, char *page) 415 char *page)
495{ 416{
496 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX); 417 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX);
497} 418}
498ISCSI_STAT_LOGIN_RO(indx);
499 419
500static ssize_t iscsi_stat_login_show_attr_accepts( 420static ssize_t iscsi_stat_login_accepts_show(struct config_item *item,
501 struct iscsi_wwn_stat_grps *igrps, char *page) 421 char *page)
502{ 422{
503 struct iscsi_tiqn *tiqn = container_of(igrps, 423 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
504 struct iscsi_tiqn, tiqn_stat_grps);
505 struct iscsi_login_stats *lstat = &tiqn->login_stats; 424 struct iscsi_login_stats *lstat = &tiqn->login_stats;
506 ssize_t ret; 425 ssize_t ret;
507 426
@@ -511,13 +430,11 @@ static ssize_t iscsi_stat_login_show_attr_accepts(
511 430
512 return ret; 431 return ret;
513} 432}
514ISCSI_STAT_LOGIN_RO(accepts);
515 433
516static ssize_t iscsi_stat_login_show_attr_other_fails( 434static ssize_t iscsi_stat_login_other_fails_show(struct config_item *item,
517 struct iscsi_wwn_stat_grps *igrps, char *page) 435 char *page)
518{ 436{
519 struct iscsi_tiqn *tiqn = container_of(igrps, 437 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
520 struct iscsi_tiqn, tiqn_stat_grps);
521 struct iscsi_login_stats *lstat = &tiqn->login_stats; 438 struct iscsi_login_stats *lstat = &tiqn->login_stats;
522 ssize_t ret; 439 ssize_t ret;
523 440
@@ -527,13 +444,11 @@ static ssize_t iscsi_stat_login_show_attr_other_fails(
527 444
528 return ret; 445 return ret;
529} 446}
530ISCSI_STAT_LOGIN_RO(other_fails);
531 447
532static ssize_t iscsi_stat_login_show_attr_redirects( 448static ssize_t iscsi_stat_login_redirects_show(struct config_item *item,
533 struct iscsi_wwn_stat_grps *igrps, char *page) 449 char *page)
534{ 450{
535 struct iscsi_tiqn *tiqn = container_of(igrps, 451 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
536 struct iscsi_tiqn, tiqn_stat_grps);
537 struct iscsi_login_stats *lstat = &tiqn->login_stats; 452 struct iscsi_login_stats *lstat = &tiqn->login_stats;
538 ssize_t ret; 453 ssize_t ret;
539 454
@@ -543,13 +458,11 @@ static ssize_t iscsi_stat_login_show_attr_redirects(
543 458
544 return ret; 459 return ret;
545} 460}
546ISCSI_STAT_LOGIN_RO(redirects);
547 461
548static ssize_t iscsi_stat_login_show_attr_authorize_fails( 462static ssize_t iscsi_stat_login_authorize_fails_show(struct config_item *item,
549 struct iscsi_wwn_stat_grps *igrps, char *page) 463 char *page)
550{ 464{
551 struct iscsi_tiqn *tiqn = container_of(igrps, 465 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
552 struct iscsi_tiqn, tiqn_stat_grps);
553 struct iscsi_login_stats *lstat = &tiqn->login_stats; 466 struct iscsi_login_stats *lstat = &tiqn->login_stats;
554 ssize_t ret; 467 ssize_t ret;
555 468
@@ -559,13 +472,11 @@ static ssize_t iscsi_stat_login_show_attr_authorize_fails(
559 472
560 return ret; 473 return ret;
561} 474}
562ISCSI_STAT_LOGIN_RO(authorize_fails);
563 475
564static ssize_t iscsi_stat_login_show_attr_authenticate_fails( 476static ssize_t iscsi_stat_login_authenticate_fails_show(
565 struct iscsi_wwn_stat_grps *igrps, char *page) 477 struct config_item *item, char *page)
566{ 478{
567 struct iscsi_tiqn *tiqn = container_of(igrps, 479 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
568 struct iscsi_tiqn, tiqn_stat_grps);
569 struct iscsi_login_stats *lstat = &tiqn->login_stats; 480 struct iscsi_login_stats *lstat = &tiqn->login_stats;
570 ssize_t ret; 481 ssize_t ret;
571 482
@@ -575,13 +486,11 @@ static ssize_t iscsi_stat_login_show_attr_authenticate_fails(
575 486
576 return ret; 487 return ret;
577} 488}
578ISCSI_STAT_LOGIN_RO(authenticate_fails);
579 489
580static ssize_t iscsi_stat_login_show_attr_negotiate_fails( 490static ssize_t iscsi_stat_login_negotiate_fails_show(struct config_item *item,
581 struct iscsi_wwn_stat_grps *igrps, char *page) 491 char *page)
582{ 492{
583 struct iscsi_tiqn *tiqn = container_of(igrps, 493 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
584 struct iscsi_tiqn, tiqn_stat_grps);
585 struct iscsi_login_stats *lstat = &tiqn->login_stats; 494 struct iscsi_login_stats *lstat = &tiqn->login_stats;
586 ssize_t ret; 495 ssize_t ret;
587 496
@@ -591,30 +500,29 @@ static ssize_t iscsi_stat_login_show_attr_negotiate_fails(
591 500
592 return ret; 501 return ret;
593} 502}
594ISCSI_STAT_LOGIN_RO(negotiate_fails);
595 503
596CONFIGFS_EATTR_OPS(iscsi_stat_login, iscsi_wwn_stat_grps, 504CONFIGFS_ATTR_RO(iscsi_stat_login_, inst);
597 iscsi_login_stats_group); 505CONFIGFS_ATTR_RO(iscsi_stat_login_, indx);
506CONFIGFS_ATTR_RO(iscsi_stat_login_, accepts);
507CONFIGFS_ATTR_RO(iscsi_stat_login_, other_fails);
508CONFIGFS_ATTR_RO(iscsi_stat_login_, redirects);
509CONFIGFS_ATTR_RO(iscsi_stat_login_, authorize_fails);
510CONFIGFS_ATTR_RO(iscsi_stat_login_, authenticate_fails);
511CONFIGFS_ATTR_RO(iscsi_stat_login_, negotiate_fails);
598 512
599static struct configfs_attribute *iscsi_stat_login_stats_attrs[] = { 513static struct configfs_attribute *iscsi_stat_login_stats_attrs[] = {
600 &iscsi_stat_login_inst.attr, 514 &iscsi_stat_login_attr_inst,
601 &iscsi_stat_login_indx.attr, 515 &iscsi_stat_login_attr_indx,
602 &iscsi_stat_login_accepts.attr, 516 &iscsi_stat_login_attr_accepts,
603 &iscsi_stat_login_other_fails.attr, 517 &iscsi_stat_login_attr_other_fails,
604 &iscsi_stat_login_redirects.attr, 518 &iscsi_stat_login_attr_redirects,
605 &iscsi_stat_login_authorize_fails.attr, 519 &iscsi_stat_login_attr_authorize_fails,
606 &iscsi_stat_login_authenticate_fails.attr, 520 &iscsi_stat_login_attr_authenticate_fails,
607 &iscsi_stat_login_negotiate_fails.attr, 521 &iscsi_stat_login_attr_negotiate_fails,
608 NULL, 522 NULL,
609}; 523};
610 524
611static struct configfs_item_operations iscsi_stat_login_stats_item_ops = {
612 .show_attribute = iscsi_stat_login_attr_show,
613 .store_attribute = iscsi_stat_login_attr_store,
614};
615
616struct config_item_type iscsi_stat_login_cit = { 525struct config_item_type iscsi_stat_login_cit = {
617 .ct_item_ops = &iscsi_stat_login_stats_item_ops,
618 .ct_attrs = iscsi_stat_login_stats_attrs, 526 .ct_attrs = iscsi_stat_login_stats_attrs,
619 .ct_owner = THIS_MODULE, 527 .ct_owner = THIS_MODULE,
620}; 528};
@@ -622,78 +530,56 @@ struct config_item_type iscsi_stat_login_cit = {
622/* 530/*
623 * Target Logout Stats Table 531 * Target Logout Stats Table
624 */ 532 */
625 533static struct iscsi_tiqn *iscsi_logout_stat_tiqn(struct config_item *item)
626CONFIGFS_EATTR_STRUCT(iscsi_stat_logout, iscsi_wwn_stat_grps);
627#define ISCSI_STAT_LOGOUT(_name, _mode) \
628static struct iscsi_stat_logout_attribute \
629 iscsi_stat_logout_##_name = \
630 __CONFIGFS_EATTR(_name, _mode, \
631 iscsi_stat_logout_show_attr_##_name, \
632 iscsi_stat_logout_store_attr_##_name);
633
634#define ISCSI_STAT_LOGOUT_RO(_name) \
635static struct iscsi_stat_logout_attribute \
636 iscsi_stat_logout_##_name = \
637 __CONFIGFS_EATTR_RO(_name, \
638 iscsi_stat_logout_show_attr_##_name);
639
640static ssize_t iscsi_stat_logout_show_attr_inst(
641 struct iscsi_wwn_stat_grps *igrps, char *page)
642{ 534{
643 struct iscsi_tiqn *tiqn = container_of(igrps, 535 struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
644 struct iscsi_tiqn, tiqn_stat_grps); 536 struct iscsi_wwn_stat_grps, iscsi_logout_stats_group);
537 return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
538}
645 539
646 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 540static ssize_t iscsi_stat_logout_inst_show(struct config_item *item, char *page)
541{
542 return snprintf(page, PAGE_SIZE, "%u\n",
543 iscsi_logout_stat_tiqn(item)->tiqn_index);
647} 544}
648ISCSI_STAT_LOGOUT_RO(inst);
649 545
650static ssize_t iscsi_stat_logout_show_attr_indx( 546static ssize_t iscsi_stat_logout_indx_show(struct config_item *item, char *page)
651 struct iscsi_wwn_stat_grps *igrps, char *page)
652{ 547{
653 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX); 548 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX);
654} 549}
655ISCSI_STAT_LOGOUT_RO(indx);
656 550
657static ssize_t iscsi_stat_logout_show_attr_normal_logouts( 551static ssize_t iscsi_stat_logout_normal_logouts_show(struct config_item *item,
658 struct iscsi_wwn_stat_grps *igrps, char *page) 552 char *page)
659{ 553{
660 struct iscsi_tiqn *tiqn = container_of(igrps, 554 struct iscsi_tiqn *tiqn = iscsi_logout_stat_tiqn(item);
661 struct iscsi_tiqn, tiqn_stat_grps);
662 struct iscsi_logout_stats *lstats = &tiqn->logout_stats; 555 struct iscsi_logout_stats *lstats = &tiqn->logout_stats;
663 556
664 return snprintf(page, PAGE_SIZE, "%u\n", lstats->normal_logouts); 557 return snprintf(page, PAGE_SIZE, "%u\n", lstats->normal_logouts);
665} 558}
666ISCSI_STAT_LOGOUT_RO(normal_logouts);
667 559
668static ssize_t iscsi_stat_logout_show_attr_abnormal_logouts( 560static ssize_t iscsi_stat_logout_abnormal_logouts_show(struct config_item *item,
669 struct iscsi_wwn_stat_grps *igrps, char *page) 561 char *page)
670{ 562{
671 struct iscsi_tiqn *tiqn = container_of(igrps, 563 struct iscsi_tiqn *tiqn = iscsi_logout_stat_tiqn(item);
672 struct iscsi_tiqn, tiqn_stat_grps);
673 struct iscsi_logout_stats *lstats = &tiqn->logout_stats; 564 struct iscsi_logout_stats *lstats = &tiqn->logout_stats;
674 565
675 return snprintf(page, PAGE_SIZE, "%u\n", lstats->abnormal_logouts); 566 return snprintf(page, PAGE_SIZE, "%u\n", lstats->abnormal_logouts);
676} 567}
677ISCSI_STAT_LOGOUT_RO(abnormal_logouts);
678 568
679CONFIGFS_EATTR_OPS(iscsi_stat_logout, iscsi_wwn_stat_grps, 569CONFIGFS_ATTR_RO(iscsi_stat_logout_, inst);
680 iscsi_logout_stats_group); 570CONFIGFS_ATTR_RO(iscsi_stat_logout_, indx);
571CONFIGFS_ATTR_RO(iscsi_stat_logout_, normal_logouts);
572CONFIGFS_ATTR_RO(iscsi_stat_logout_, abnormal_logouts);
681 573
682static struct configfs_attribute *iscsi_stat_logout_stats_attrs[] = { 574static struct configfs_attribute *iscsi_stat_logout_stats_attrs[] = {
683 &iscsi_stat_logout_inst.attr, 575 &iscsi_stat_logout_attr_inst,
684 &iscsi_stat_logout_indx.attr, 576 &iscsi_stat_logout_attr_indx,
685 &iscsi_stat_logout_normal_logouts.attr, 577 &iscsi_stat_logout_attr_normal_logouts,
686 &iscsi_stat_logout_abnormal_logouts.attr, 578 &iscsi_stat_logout_attr_abnormal_logouts,
687 NULL, 579 NULL,
688}; 580};
689 581
690static struct configfs_item_operations iscsi_stat_logout_stats_item_ops = {
691 .show_attribute = iscsi_stat_logout_attr_show,
692 .store_attribute = iscsi_stat_logout_attr_store,
693};
694
695struct config_item_type iscsi_stat_logout_cit = { 582struct config_item_type iscsi_stat_logout_cit = {
696 .ct_item_ops = &iscsi_stat_logout_stats_item_ops,
697 .ct_attrs = iscsi_stat_logout_stats_attrs, 583 .ct_attrs = iscsi_stat_logout_stats_attrs,
698 .ct_owner = THIS_MODULE, 584 .ct_owner = THIS_MODULE,
699}; 585};
@@ -701,39 +587,26 @@ struct config_item_type iscsi_stat_logout_cit = {
701/* 587/*
702 * Session Stats Table 588 * Session Stats Table
703 */ 589 */
590static struct iscsi_node_acl *iscsi_stat_nacl(struct config_item *item)
591{
592 struct iscsi_node_stat_grps *igrps = container_of(to_config_group(item),
593 struct iscsi_node_stat_grps, iscsi_sess_stats_group);
594 return container_of(igrps, struct iscsi_node_acl, node_stat_grps);
595}
704 596
705CONFIGFS_EATTR_STRUCT(iscsi_stat_sess, iscsi_node_stat_grps); 597static ssize_t iscsi_stat_sess_inst_show(struct config_item *item, char *page)
706#define ISCSI_STAT_SESS(_name, _mode) \ 598{
707static struct iscsi_stat_sess_attribute \ 599 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
708 iscsi_stat_sess_##_name = \
709 __CONFIGFS_EATTR(_name, _mode, \
710 iscsi_stat_sess_show_attr_##_name, \
711 iscsi_stat_sess_store_attr_##_name);
712
713#define ISCSI_STAT_SESS_RO(_name) \
714static struct iscsi_stat_sess_attribute \
715 iscsi_stat_sess_##_name = \
716 __CONFIGFS_EATTR_RO(_name, \
717 iscsi_stat_sess_show_attr_##_name);
718
719static ssize_t iscsi_stat_sess_show_attr_inst(
720 struct iscsi_node_stat_grps *igrps, char *page)
721{
722 struct iscsi_node_acl *acl = container_of(igrps,
723 struct iscsi_node_acl, node_stat_grps);
724 struct se_wwn *wwn = acl->se_node_acl.se_tpg->se_tpg_wwn; 600 struct se_wwn *wwn = acl->se_node_acl.se_tpg->se_tpg_wwn;
725 struct iscsi_tiqn *tiqn = container_of(wwn, 601 struct iscsi_tiqn *tiqn = container_of(wwn,
726 struct iscsi_tiqn, tiqn_wwn); 602 struct iscsi_tiqn, tiqn_wwn);
727 603
728 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 604 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index);
729} 605}
730ISCSI_STAT_SESS_RO(inst);
731 606
732static ssize_t iscsi_stat_sess_show_attr_node( 607static ssize_t iscsi_stat_sess_node_show(struct config_item *item, char *page)
733 struct iscsi_node_stat_grps *igrps, char *page)
734{ 608{
735 struct iscsi_node_acl *acl = container_of(igrps, 609 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
736 struct iscsi_node_acl, node_stat_grps);
737 struct se_node_acl *se_nacl = &acl->se_node_acl; 610 struct se_node_acl *se_nacl = &acl->se_node_acl;
738 struct iscsi_session *sess; 611 struct iscsi_session *sess;
739 struct se_session *se_sess; 612 struct se_session *se_sess;
@@ -751,13 +624,10 @@ static ssize_t iscsi_stat_sess_show_attr_node(
751 624
752 return ret; 625 return ret;
753} 626}
754ISCSI_STAT_SESS_RO(node);
755 627
756static ssize_t iscsi_stat_sess_show_attr_indx( 628static ssize_t iscsi_stat_sess_indx_show(struct config_item *item, char *page)
757 struct iscsi_node_stat_grps *igrps, char *page)
758{ 629{
759 struct iscsi_node_acl *acl = container_of(igrps, 630 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
760 struct iscsi_node_acl, node_stat_grps);
761 struct se_node_acl *se_nacl = &acl->se_node_acl; 631 struct se_node_acl *se_nacl = &acl->se_node_acl;
762 struct iscsi_session *sess; 632 struct iscsi_session *sess;
763 struct se_session *se_sess; 633 struct se_session *se_sess;
@@ -775,13 +645,11 @@ static ssize_t iscsi_stat_sess_show_attr_indx(
775 645
776 return ret; 646 return ret;
777} 647}
778ISCSI_STAT_SESS_RO(indx);
779 648
780static ssize_t iscsi_stat_sess_show_attr_cmd_pdus( 649static ssize_t iscsi_stat_sess_cmd_pdus_show(struct config_item *item,
781 struct iscsi_node_stat_grps *igrps, char *page) 650 char *page)
782{ 651{
783 struct iscsi_node_acl *acl = container_of(igrps, 652 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
784 struct iscsi_node_acl, node_stat_grps);
785 struct se_node_acl *se_nacl = &acl->se_node_acl; 653 struct se_node_acl *se_nacl = &acl->se_node_acl;
786 struct iscsi_session *sess; 654 struct iscsi_session *sess;
787 struct se_session *se_sess; 655 struct se_session *se_sess;
@@ -799,13 +667,11 @@ static ssize_t iscsi_stat_sess_show_attr_cmd_pdus(
799 667
800 return ret; 668 return ret;
801} 669}
802ISCSI_STAT_SESS_RO(cmd_pdus);
803 670
804static ssize_t iscsi_stat_sess_show_attr_rsp_pdus( 671static ssize_t iscsi_stat_sess_rsp_pdus_show(struct config_item *item,
805 struct iscsi_node_stat_grps *igrps, char *page) 672 char *page)
806{ 673{
807 struct iscsi_node_acl *acl = container_of(igrps, 674 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
808 struct iscsi_node_acl, node_stat_grps);
809 struct se_node_acl *se_nacl = &acl->se_node_acl; 675 struct se_node_acl *se_nacl = &acl->se_node_acl;
810 struct iscsi_session *sess; 676 struct iscsi_session *sess;
811 struct se_session *se_sess; 677 struct se_session *se_sess;
@@ -823,13 +689,11 @@ static ssize_t iscsi_stat_sess_show_attr_rsp_pdus(
823 689
824 return ret; 690 return ret;
825} 691}
826ISCSI_STAT_SESS_RO(rsp_pdus);
827 692
828static ssize_t iscsi_stat_sess_show_attr_txdata_octs( 693static ssize_t iscsi_stat_sess_txdata_octs_show(struct config_item *item,
829 struct iscsi_node_stat_grps *igrps, char *page) 694 char *page)
830{ 695{
831 struct iscsi_node_acl *acl = container_of(igrps, 696 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
832 struct iscsi_node_acl, node_stat_grps);
833 struct se_node_acl *se_nacl = &acl->se_node_acl; 697 struct se_node_acl *se_nacl = &acl->se_node_acl;
834 struct iscsi_session *sess; 698 struct iscsi_session *sess;
835 struct se_session *se_sess; 699 struct se_session *se_sess;
@@ -847,13 +711,11 @@ static ssize_t iscsi_stat_sess_show_attr_txdata_octs(
847 711
848 return ret; 712 return ret;
849} 713}
850ISCSI_STAT_SESS_RO(txdata_octs);
851 714
852static ssize_t iscsi_stat_sess_show_attr_rxdata_octs( 715static ssize_t iscsi_stat_sess_rxdata_octs_show(struct config_item *item,
853 struct iscsi_node_stat_grps *igrps, char *page) 716 char *page)
854{ 717{
855 struct iscsi_node_acl *acl = container_of(igrps, 718 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
856 struct iscsi_node_acl, node_stat_grps);
857 struct se_node_acl *se_nacl = &acl->se_node_acl; 719 struct se_node_acl *se_nacl = &acl->se_node_acl;
858 struct iscsi_session *sess; 720 struct iscsi_session *sess;
859 struct se_session *se_sess; 721 struct se_session *se_sess;
@@ -871,13 +733,11 @@ static ssize_t iscsi_stat_sess_show_attr_rxdata_octs(
871 733
872 return ret; 734 return ret;
873} 735}
874ISCSI_STAT_SESS_RO(rxdata_octs);
875 736
876static ssize_t iscsi_stat_sess_show_attr_conn_digest_errors( 737static ssize_t iscsi_stat_sess_conn_digest_errors_show(struct config_item *item,
877 struct iscsi_node_stat_grps *igrps, char *page) 738 char *page)
878{ 739{
879 struct iscsi_node_acl *acl = container_of(igrps, 740 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
880 struct iscsi_node_acl, node_stat_grps);
881 struct se_node_acl *se_nacl = &acl->se_node_acl; 741 struct se_node_acl *se_nacl = &acl->se_node_acl;
882 struct iscsi_session *sess; 742 struct iscsi_session *sess;
883 struct se_session *se_sess; 743 struct se_session *se_sess;
@@ -895,13 +755,11 @@ static ssize_t iscsi_stat_sess_show_attr_conn_digest_errors(
895 755
896 return ret; 756 return ret;
897} 757}
898ISCSI_STAT_SESS_RO(conn_digest_errors);
899 758
900static ssize_t iscsi_stat_sess_show_attr_conn_timeout_errors( 759static ssize_t iscsi_stat_sess_conn_timeout_errors_show(
901 struct iscsi_node_stat_grps *igrps, char *page) 760 struct config_item *item, char *page)
902{ 761{
903 struct iscsi_node_acl *acl = container_of(igrps, 762 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
904 struct iscsi_node_acl, node_stat_grps);
905 struct se_node_acl *se_nacl = &acl->se_node_acl; 763 struct se_node_acl *se_nacl = &acl->se_node_acl;
906 struct iscsi_session *sess; 764 struct iscsi_session *sess;
907 struct se_session *se_sess; 765 struct se_session *se_sess;
@@ -919,31 +777,31 @@ static ssize_t iscsi_stat_sess_show_attr_conn_timeout_errors(
919 777
920 return ret; 778 return ret;
921} 779}
922ISCSI_STAT_SESS_RO(conn_timeout_errors);
923 780
924CONFIGFS_EATTR_OPS(iscsi_stat_sess, iscsi_node_stat_grps, 781CONFIGFS_ATTR_RO(iscsi_stat_sess_, inst);
925 iscsi_sess_stats_group); 782CONFIGFS_ATTR_RO(iscsi_stat_sess_, node);
783CONFIGFS_ATTR_RO(iscsi_stat_sess_, indx);
784CONFIGFS_ATTR_RO(iscsi_stat_sess_, cmd_pdus);
785CONFIGFS_ATTR_RO(iscsi_stat_sess_, rsp_pdus);
786CONFIGFS_ATTR_RO(iscsi_stat_sess_, txdata_octs);
787CONFIGFS_ATTR_RO(iscsi_stat_sess_, rxdata_octs);
788CONFIGFS_ATTR_RO(iscsi_stat_sess_, conn_digest_errors);
789CONFIGFS_ATTR_RO(iscsi_stat_sess_, conn_timeout_errors);
926 790
927static struct configfs_attribute *iscsi_stat_sess_stats_attrs[] = { 791static struct configfs_attribute *iscsi_stat_sess_stats_attrs[] = {
928 &iscsi_stat_sess_inst.attr, 792 &iscsi_stat_sess_attr_inst,
929 &iscsi_stat_sess_node.attr, 793 &iscsi_stat_sess_attr_node,
930 &iscsi_stat_sess_indx.attr, 794 &iscsi_stat_sess_attr_indx,
931 &iscsi_stat_sess_cmd_pdus.attr, 795 &iscsi_stat_sess_attr_cmd_pdus,
932 &iscsi_stat_sess_rsp_pdus.attr, 796 &iscsi_stat_sess_attr_rsp_pdus,
933 &iscsi_stat_sess_txdata_octs.attr, 797 &iscsi_stat_sess_attr_txdata_octs,
934 &iscsi_stat_sess_rxdata_octs.attr, 798 &iscsi_stat_sess_attr_rxdata_octs,
935 &iscsi_stat_sess_conn_digest_errors.attr, 799 &iscsi_stat_sess_attr_conn_digest_errors,
936 &iscsi_stat_sess_conn_timeout_errors.attr, 800 &iscsi_stat_sess_attr_conn_timeout_errors,
937 NULL, 801 NULL,
938}; 802};
939 803
940static struct configfs_item_operations iscsi_stat_sess_stats_item_ops = {
941 .show_attribute = iscsi_stat_sess_attr_show,
942 .store_attribute = iscsi_stat_sess_attr_store,
943};
944
945struct config_item_type iscsi_stat_sess_cit = { 804struct config_item_type iscsi_stat_sess_cit = {
946 .ct_item_ops = &iscsi_stat_sess_stats_item_ops,
947 .ct_attrs = iscsi_stat_sess_stats_attrs, 805 .ct_attrs = iscsi_stat_sess_stats_attrs,
948 .ct_owner = THIS_MODULE, 806 .ct_owner = THIS_MODULE,
949}; 807};
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
index 5bc85ffed720..999b6eba52e8 100644
--- a/drivers/target/loopback/tcm_loop.c
+++ b/drivers/target/loopback/tcm_loop.c
@@ -34,7 +34,6 @@
34 34
35#include <target/target_core_base.h> 35#include <target/target_core_base.h>
36#include <target/target_core_fabric.h> 36#include <target/target_core_fabric.h>
37#include <target/target_core_fabric_configfs.h>
38 37
39#include "tcm_loop.h" 38#include "tcm_loop.h"
40 39
@@ -763,21 +762,20 @@ static void tcm_loop_port_unlink(
763 762
764/* End items for tcm_loop_port_cit */ 763/* End items for tcm_loop_port_cit */
765 764
766static ssize_t tcm_loop_tpg_attrib_show_fabric_prot_type( 765static ssize_t tcm_loop_tpg_attrib_fabric_prot_type_show(
767 struct se_portal_group *se_tpg, 766 struct config_item *item, char *page)
768 char *page)
769{ 767{
768 struct se_portal_group *se_tpg = attrib_to_tpg(item);
770 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg, 769 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg,
771 tl_se_tpg); 770 tl_se_tpg);
772 771
773 return sprintf(page, "%d\n", tl_tpg->tl_fabric_prot_type); 772 return sprintf(page, "%d\n", tl_tpg->tl_fabric_prot_type);
774} 773}
775 774
776static ssize_t tcm_loop_tpg_attrib_store_fabric_prot_type( 775static ssize_t tcm_loop_tpg_attrib_fabric_prot_type_store(
777 struct se_portal_group *se_tpg, 776 struct config_item *item, const char *page, size_t count)
778 const char *page,
779 size_t count)
780{ 777{
778 struct se_portal_group *se_tpg = attrib_to_tpg(item);
781 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg, 779 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg,
782 tl_se_tpg); 780 tl_se_tpg);
783 unsigned long val; 781 unsigned long val;
@@ -796,10 +794,10 @@ static ssize_t tcm_loop_tpg_attrib_store_fabric_prot_type(
796 return count; 794 return count;
797} 795}
798 796
799TF_TPG_ATTRIB_ATTR(tcm_loop, fabric_prot_type, S_IRUGO | S_IWUSR); 797CONFIGFS_ATTR(tcm_loop_tpg_attrib_, fabric_prot_type);
800 798
801static struct configfs_attribute *tcm_loop_tpg_attrib_attrs[] = { 799static struct configfs_attribute *tcm_loop_tpg_attrib_attrs[] = {
802 &tcm_loop_tpg_attrib_fabric_prot_type.attr, 800 &tcm_loop_tpg_attrib_attr_fabric_prot_type,
803 NULL, 801 NULL,
804}; 802};
805 803
@@ -894,10 +892,9 @@ static int tcm_loop_drop_nexus(
894 892
895/* End items for tcm_loop_nexus_cit */ 893/* End items for tcm_loop_nexus_cit */
896 894
897static ssize_t tcm_loop_tpg_show_nexus( 895static ssize_t tcm_loop_tpg_nexus_show(struct config_item *item, char *page)
898 struct se_portal_group *se_tpg,
899 char *page)
900{ 896{
897 struct se_portal_group *se_tpg = to_tpg(item);
901 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, 898 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
902 struct tcm_loop_tpg, tl_se_tpg); 899 struct tcm_loop_tpg, tl_se_tpg);
903 struct tcm_loop_nexus *tl_nexus; 900 struct tcm_loop_nexus *tl_nexus;
@@ -913,11 +910,10 @@ static ssize_t tcm_loop_tpg_show_nexus(
913 return ret; 910 return ret;
914} 911}
915 912
916static ssize_t tcm_loop_tpg_store_nexus( 913static ssize_t tcm_loop_tpg_nexus_store(struct config_item *item,
917 struct se_portal_group *se_tpg, 914 const char *page, size_t count)
918 const char *page,
919 size_t count)
920{ 915{
916 struct se_portal_group *se_tpg = to_tpg(item);
921 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, 917 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
922 struct tcm_loop_tpg, tl_se_tpg); 918 struct tcm_loop_tpg, tl_se_tpg);
923 struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba; 919 struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba;
@@ -992,12 +988,10 @@ check_newline:
992 return count; 988 return count;
993} 989}
994 990
995TF_TPG_BASE_ATTR(tcm_loop, nexus, S_IRUGO | S_IWUSR); 991static ssize_t tcm_loop_tpg_transport_status_show(struct config_item *item,
996 992 char *page)
997static ssize_t tcm_loop_tpg_show_transport_status(
998 struct se_portal_group *se_tpg,
999 char *page)
1000{ 993{
994 struct se_portal_group *se_tpg = to_tpg(item);
1001 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, 995 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
1002 struct tcm_loop_tpg, tl_se_tpg); 996 struct tcm_loop_tpg, tl_se_tpg);
1003 const char *status = NULL; 997 const char *status = NULL;
@@ -1020,11 +1014,10 @@ static ssize_t tcm_loop_tpg_show_transport_status(
1020 return ret; 1014 return ret;
1021} 1015}
1022 1016
1023static ssize_t tcm_loop_tpg_store_transport_status( 1017static ssize_t tcm_loop_tpg_transport_status_store(struct config_item *item,
1024 struct se_portal_group *se_tpg, 1018 const char *page, size_t count)
1025 const char *page,
1026 size_t count)
1027{ 1019{
1020 struct se_portal_group *se_tpg = to_tpg(item);
1028 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, 1021 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
1029 struct tcm_loop_tpg, tl_se_tpg); 1022 struct tcm_loop_tpg, tl_se_tpg);
1030 1023
@@ -1044,11 +1037,12 @@ static ssize_t tcm_loop_tpg_store_transport_status(
1044 return -EINVAL; 1037 return -EINVAL;
1045} 1038}
1046 1039
1047TF_TPG_BASE_ATTR(tcm_loop, transport_status, S_IRUGO | S_IWUSR); 1040CONFIGFS_ATTR(tcm_loop_tpg_, nexus);
1041CONFIGFS_ATTR(tcm_loop_tpg_, transport_status);
1048 1042
1049static struct configfs_attribute *tcm_loop_tpg_attrs[] = { 1043static struct configfs_attribute *tcm_loop_tpg_attrs[] = {
1050 &tcm_loop_tpg_nexus.attr, 1044 &tcm_loop_tpg_attr_nexus,
1051 &tcm_loop_tpg_transport_status.attr, 1045 &tcm_loop_tpg_attr_transport_status,
1052 NULL, 1046 NULL,
1053}; 1047};
1054 1048
@@ -1216,17 +1210,15 @@ static void tcm_loop_drop_scsi_hba(
1216} 1210}
1217 1211
1218/* Start items for tcm_loop_cit */ 1212/* Start items for tcm_loop_cit */
1219static ssize_t tcm_loop_wwn_show_attr_version( 1213static ssize_t tcm_loop_wwn_version_show(struct config_item *item, char *page)
1220 struct target_fabric_configfs *tf,
1221 char *page)
1222{ 1214{
1223 return sprintf(page, "TCM Loopback Fabric module %s\n", TCM_LOOP_VERSION); 1215 return sprintf(page, "TCM Loopback Fabric module %s\n", TCM_LOOP_VERSION);
1224} 1216}
1225 1217
1226TF_WWN_ATTR_RO(tcm_loop, version); 1218CONFIGFS_ATTR_RO(tcm_loop_wwn_, version);
1227 1219
1228static struct configfs_attribute *tcm_loop_wwn_attrs[] = { 1220static struct configfs_attribute *tcm_loop_wwn_attrs[] = {
1229 &tcm_loop_wwn_version.attr, 1221 &tcm_loop_wwn_attr_version,
1230 NULL, 1222 NULL,
1231}; 1223};
1232 1224
diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c
index 0edf320fb685..35f7d31b29d2 100644
--- a/drivers/target/sbp/sbp_target.c
+++ b/drivers/target/sbp/sbp_target.c
@@ -35,8 +35,6 @@
35#include <target/target_core_base.h> 35#include <target/target_core_base.h>
36#include <target/target_core_backend.h> 36#include <target/target_core_backend.h>
37#include <target/target_core_fabric.h> 37#include <target/target_core_fabric.h>
38#include <target/target_core_fabric_configfs.h>
39#include <target/configfs_macros.h>
40#include <asm/unaligned.h> 38#include <asm/unaligned.h>
41 39
42#include "sbp_target.h" 40#include "sbp_target.h"
@@ -2111,24 +2109,21 @@ static void sbp_drop_tport(struct se_wwn *wwn)
2111 kfree(tport); 2109 kfree(tport);
2112} 2110}
2113 2111
2114static ssize_t sbp_wwn_show_attr_version( 2112static ssize_t sbp_wwn_version_show(struct config_item *item, char *page)
2115 struct target_fabric_configfs *tf,
2116 char *page)
2117{ 2113{
2118 return sprintf(page, "FireWire SBP fabric module %s\n", SBP_VERSION); 2114 return sprintf(page, "FireWire SBP fabric module %s\n", SBP_VERSION);
2119} 2115}
2120 2116
2121TF_WWN_ATTR_RO(sbp, version); 2117CONFIGFS_ATTR_RO(sbp_wwn_, version);
2122 2118
2123static struct configfs_attribute *sbp_wwn_attrs[] = { 2119static struct configfs_attribute *sbp_wwn_attrs[] = {
2124 &sbp_wwn_version.attr, 2120 &sbp_wwn_attr_version,
2125 NULL, 2121 NULL,
2126}; 2122};
2127 2123
2128static ssize_t sbp_tpg_show_directory_id( 2124static ssize_t sbp_tpg_directory_id_show(struct config_item *item, char *page)
2129 struct se_portal_group *se_tpg,
2130 char *page)
2131{ 2125{
2126 struct se_portal_group *se_tpg = to_tpg(item);
2132 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2127 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2133 struct sbp_tport *tport = tpg->tport; 2128 struct sbp_tport *tport = tpg->tport;
2134 2129
@@ -2138,11 +2133,10 @@ static ssize_t sbp_tpg_show_directory_id(
2138 return sprintf(page, "%06x\n", tport->directory_id); 2133 return sprintf(page, "%06x\n", tport->directory_id);
2139} 2134}
2140 2135
2141static ssize_t sbp_tpg_store_directory_id( 2136static ssize_t sbp_tpg_directory_id_store(struct config_item *item,
2142 struct se_portal_group *se_tpg, 2137 const char *page, size_t count)
2143 const char *page,
2144 size_t count)
2145{ 2138{
2139 struct se_portal_group *se_tpg = to_tpg(item);
2146 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2140 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2147 struct sbp_tport *tport = tpg->tport; 2141 struct sbp_tport *tport = tpg->tport;
2148 unsigned long val; 2142 unsigned long val;
@@ -2166,20 +2160,18 @@ static ssize_t sbp_tpg_store_directory_id(
2166 return count; 2160 return count;
2167} 2161}
2168 2162
2169static ssize_t sbp_tpg_show_enable( 2163static ssize_t sbp_tpg_enable_show(struct config_item *item, char *page)
2170 struct se_portal_group *se_tpg,
2171 char *page)
2172{ 2164{
2165 struct se_portal_group *se_tpg = to_tpg(item);
2173 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2166 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2174 struct sbp_tport *tport = tpg->tport; 2167 struct sbp_tport *tport = tpg->tport;
2175 return sprintf(page, "%d\n", tport->enable); 2168 return sprintf(page, "%d\n", tport->enable);
2176} 2169}
2177 2170
2178static ssize_t sbp_tpg_store_enable( 2171static ssize_t sbp_tpg_enable_store(struct config_item *item,
2179 struct se_portal_group *se_tpg, 2172 const char *page, size_t count)
2180 const char *page,
2181 size_t count)
2182{ 2173{
2174 struct se_portal_group *se_tpg = to_tpg(item);
2183 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2175 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2184 struct sbp_tport *tport = tpg->tport; 2176 struct sbp_tport *tport = tpg->tport;
2185 unsigned long val; 2177 unsigned long val;
@@ -2219,29 +2211,28 @@ static ssize_t sbp_tpg_store_enable(
2219 return count; 2211 return count;
2220} 2212}
2221 2213
2222TF_TPG_BASE_ATTR(sbp, directory_id, S_IRUGO | S_IWUSR); 2214CONFIGFS_ATTR(sbp_tpg_, directory_id);
2223TF_TPG_BASE_ATTR(sbp, enable, S_IRUGO | S_IWUSR); 2215CONFIGFS_ATTR(sbp_tpg_, enable);
2224 2216
2225static struct configfs_attribute *sbp_tpg_base_attrs[] = { 2217static struct configfs_attribute *sbp_tpg_base_attrs[] = {
2226 &sbp_tpg_directory_id.attr, 2218 &sbp_tpg_attr_directory_id,
2227 &sbp_tpg_enable.attr, 2219 &sbp_tpg_attr_enable,
2228 NULL, 2220 NULL,
2229}; 2221};
2230 2222
2231static ssize_t sbp_tpg_attrib_show_mgt_orb_timeout( 2223static ssize_t sbp_tpg_attrib_mgt_orb_timeout_show(struct config_item *item,
2232 struct se_portal_group *se_tpg,
2233 char *page) 2224 char *page)
2234{ 2225{
2226 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2235 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2227 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2236 struct sbp_tport *tport = tpg->tport; 2228 struct sbp_tport *tport = tpg->tport;
2237 return sprintf(page, "%d\n", tport->mgt_orb_timeout); 2229 return sprintf(page, "%d\n", tport->mgt_orb_timeout);
2238} 2230}
2239 2231
2240static ssize_t sbp_tpg_attrib_store_mgt_orb_timeout( 2232static ssize_t sbp_tpg_attrib_mgt_orb_timeout_store(struct config_item *item,
2241 struct se_portal_group *se_tpg, 2233 const char *page, size_t count)
2242 const char *page,
2243 size_t count)
2244{ 2234{
2235 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2245 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2236 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2246 struct sbp_tport *tport = tpg->tport; 2237 struct sbp_tport *tport = tpg->tport;
2247 unsigned long val; 2238 unsigned long val;
@@ -2264,20 +2255,19 @@ static ssize_t sbp_tpg_attrib_store_mgt_orb_timeout(
2264 return count; 2255 return count;
2265} 2256}
2266 2257
2267static ssize_t sbp_tpg_attrib_show_max_reconnect_timeout( 2258static ssize_t sbp_tpg_attrib_max_reconnect_timeout_show(struct config_item *item,
2268 struct se_portal_group *se_tpg,
2269 char *page) 2259 char *page)
2270{ 2260{
2261 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2271 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2262 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2272 struct sbp_tport *tport = tpg->tport; 2263 struct sbp_tport *tport = tpg->tport;
2273 return sprintf(page, "%d\n", tport->max_reconnect_timeout); 2264 return sprintf(page, "%d\n", tport->max_reconnect_timeout);
2274} 2265}
2275 2266
2276static ssize_t sbp_tpg_attrib_store_max_reconnect_timeout( 2267static ssize_t sbp_tpg_attrib_max_reconnect_timeout_store(struct config_item *item,
2277 struct se_portal_group *se_tpg, 2268 const char *page, size_t count)
2278 const char *page,
2279 size_t count)
2280{ 2269{
2270 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2281 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2271 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2282 struct sbp_tport *tport = tpg->tport; 2272 struct sbp_tport *tport = tpg->tport;
2283 unsigned long val; 2273 unsigned long val;
@@ -2300,20 +2290,19 @@ static ssize_t sbp_tpg_attrib_store_max_reconnect_timeout(
2300 return count; 2290 return count;
2301} 2291}
2302 2292
2303static ssize_t sbp_tpg_attrib_show_max_logins_per_lun( 2293static ssize_t sbp_tpg_attrib_max_logins_per_lun_show(struct config_item *item,
2304 struct se_portal_group *se_tpg,
2305 char *page) 2294 char *page)
2306{ 2295{
2296 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2307 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2297 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2308 struct sbp_tport *tport = tpg->tport; 2298 struct sbp_tport *tport = tpg->tport;
2309 return sprintf(page, "%d\n", tport->max_logins_per_lun); 2299 return sprintf(page, "%d\n", tport->max_logins_per_lun);
2310} 2300}
2311 2301
2312static ssize_t sbp_tpg_attrib_store_max_logins_per_lun( 2302static ssize_t sbp_tpg_attrib_max_logins_per_lun_store(struct config_item *item,
2313 struct se_portal_group *se_tpg, 2303 const char *page, size_t count)
2314 const char *page,
2315 size_t count)
2316{ 2304{
2305 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2317 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2306 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2318 struct sbp_tport *tport = tpg->tport; 2307 struct sbp_tport *tport = tpg->tport;
2319 unsigned long val; 2308 unsigned long val;
@@ -2330,14 +2319,14 @@ static ssize_t sbp_tpg_attrib_store_max_logins_per_lun(
2330 return count; 2319 return count;
2331} 2320}
2332 2321
2333TF_TPG_ATTRIB_ATTR(sbp, mgt_orb_timeout, S_IRUGO | S_IWUSR); 2322CONFIGFS_ATTR(sbp_tpg_attrib_, mgt_orb_timeout);
2334TF_TPG_ATTRIB_ATTR(sbp, max_reconnect_timeout, S_IRUGO | S_IWUSR); 2323CONFIGFS_ATTR(sbp_tpg_attrib_, max_reconnect_timeout);
2335TF_TPG_ATTRIB_ATTR(sbp, max_logins_per_lun, S_IRUGO | S_IWUSR); 2324CONFIGFS_ATTR(sbp_tpg_attrib_, max_logins_per_lun);
2336 2325
2337static struct configfs_attribute *sbp_tpg_attrib_attrs[] = { 2326static struct configfs_attribute *sbp_tpg_attrib_attrs[] = {
2338 &sbp_tpg_attrib_mgt_orb_timeout.attr, 2327 &sbp_tpg_attrib_attr_mgt_orb_timeout,
2339 &sbp_tpg_attrib_max_reconnect_timeout.attr, 2328 &sbp_tpg_attrib_attr_max_reconnect_timeout,
2340 &sbp_tpg_attrib_max_logins_per_lun.attr, 2329 &sbp_tpg_attrib_attr_max_logins_per_lun,
2341 NULL, 2330 NULL,
2342}; 2331};
2343 2332
diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c
index 860e84046177..b9b9ffde4c7a 100644
--- a/drivers/target/target_core_configfs.c
+++ b/drivers/target/target_core_configfs.c
@@ -40,8 +40,6 @@
40#include <target/target_core_base.h> 40#include <target/target_core_base.h>
41#include <target/target_core_backend.h> 41#include <target/target_core_backend.h>
42#include <target/target_core_fabric.h> 42#include <target/target_core_fabric.h>
43#include <target/target_core_fabric_configfs.h>
44#include <target/configfs_macros.h>
45 43
46#include "target_core_internal.h" 44#include "target_core_internal.h"
47#include "target_core_alua.h" 45#include "target_core_alua.h"
@@ -78,12 +76,6 @@ extern struct t10_alua_lu_gp *default_lu_gp;
78static LIST_HEAD(g_tf_list); 76static LIST_HEAD(g_tf_list);
79static DEFINE_MUTEX(g_tf_lock); 77static DEFINE_MUTEX(g_tf_lock);
80 78
81struct target_core_configfs_attribute {
82 struct configfs_attribute attr;
83 ssize_t (*show)(void *, char *);
84 ssize_t (*store)(void *, const char *, size_t);
85};
86
87static struct config_group target_core_hbagroup; 79static struct config_group target_core_hbagroup;
88static struct config_group alua_group; 80static struct config_group alua_group;
89static struct config_group alua_lu_gps_group; 81static struct config_group alua_lu_gps_group;
@@ -97,24 +89,15 @@ item_to_hba(struct config_item *item)
97/* 89/*
98 * Attributes for /sys/kernel/config/target/ 90 * Attributes for /sys/kernel/config/target/
99 */ 91 */
100static ssize_t target_core_attr_show(struct config_item *item, 92static ssize_t target_core_item_version_show(struct config_item *item,
101 struct configfs_attribute *attr, 93 char *page)
102 char *page)
103{ 94{
104 return sprintf(page, "Target Engine Core ConfigFS Infrastructure %s" 95 return sprintf(page, "Target Engine Core ConfigFS Infrastructure %s"
105 " on %s/%s on "UTS_RELEASE"\n", TARGET_CORE_VERSION, 96 " on %s/%s on "UTS_RELEASE"\n", TARGET_CORE_VERSION,
106 utsname()->sysname, utsname()->machine); 97 utsname()->sysname, utsname()->machine);
107} 98}
108 99
109static struct configfs_item_operations target_core_fabric_item_ops = { 100CONFIGFS_ATTR_RO(target_core_item_, version);
110 .show_attribute = target_core_attr_show,
111};
112
113static struct configfs_attribute target_core_item_attr_version = {
114 .ca_owner = THIS_MODULE,
115 .ca_name = "version",
116 .ca_mode = S_IRUGO,
117};
118 101
119static struct target_fabric_configfs *target_core_get_fabric( 102static struct target_fabric_configfs *target_core_get_fabric(
120 const char *name) 103 const char *name)
@@ -273,7 +256,6 @@ static struct configfs_attribute *target_core_fabric_item_attrs[] = {
273 * Provides Fabrics Groups and Item Attributes for /sys/kernel/config/target/ 256 * Provides Fabrics Groups and Item Attributes for /sys/kernel/config/target/
274 */ 257 */
275static struct config_item_type target_core_fabrics_item = { 258static struct config_item_type target_core_fabrics_item = {
276 .ct_item_ops = &target_core_fabric_item_ops,
277 .ct_group_ops = &target_core_fabric_group_ops, 259 .ct_group_ops = &target_core_fabric_group_ops,
278 .ct_attrs = target_core_fabric_item_attrs, 260 .ct_attrs = target_core_fabric_item_attrs,
279 .ct_owner = THIS_MODULE, 261 .ct_owner = THIS_MODULE,
@@ -476,47 +458,54 @@ EXPORT_SYMBOL(target_unregister_template);
476// Stop functions called by external Target Fabrics Modules 458// Stop functions called by external Target Fabrics Modules
477//############################################################################*/ 459//############################################################################*/
478 460
461static inline struct se_dev_attrib *to_attrib(struct config_item *item)
462{
463 return container_of(to_config_group(item), struct se_dev_attrib,
464 da_group);
465}
466
479/* Start functions for struct config_item_type tb_dev_attrib_cit */ 467/* Start functions for struct config_item_type tb_dev_attrib_cit */
480#define DEF_TB_DEV_ATTRIB_SHOW(_name) \ 468#define DEF_CONFIGFS_ATTRIB_SHOW(_name) \
481static ssize_t show_##_name(struct se_dev_attrib *da, char *page) \ 469static ssize_t _name##_show(struct config_item *item, char *page) \
482{ \ 470{ \
483 return snprintf(page, PAGE_SIZE, "%u\n", da->_name); \ 471 return snprintf(page, PAGE_SIZE, "%u\n", to_attrib(item)->_name); \
484} 472}
485 473
486DEF_TB_DEV_ATTRIB_SHOW(emulate_model_alias); 474DEF_CONFIGFS_ATTRIB_SHOW(emulate_model_alias);
487DEF_TB_DEV_ATTRIB_SHOW(emulate_dpo); 475DEF_CONFIGFS_ATTRIB_SHOW(emulate_dpo);
488DEF_TB_DEV_ATTRIB_SHOW(emulate_fua_write); 476DEF_CONFIGFS_ATTRIB_SHOW(emulate_fua_write);
489DEF_TB_DEV_ATTRIB_SHOW(emulate_fua_read); 477DEF_CONFIGFS_ATTRIB_SHOW(emulate_fua_read);
490DEF_TB_DEV_ATTRIB_SHOW(emulate_write_cache); 478DEF_CONFIGFS_ATTRIB_SHOW(emulate_write_cache);
491DEF_TB_DEV_ATTRIB_SHOW(emulate_ua_intlck_ctrl); 479DEF_CONFIGFS_ATTRIB_SHOW(emulate_ua_intlck_ctrl);
492DEF_TB_DEV_ATTRIB_SHOW(emulate_tas); 480DEF_CONFIGFS_ATTRIB_SHOW(emulate_tas);
493DEF_TB_DEV_ATTRIB_SHOW(emulate_tpu); 481DEF_CONFIGFS_ATTRIB_SHOW(emulate_tpu);
494DEF_TB_DEV_ATTRIB_SHOW(emulate_tpws); 482DEF_CONFIGFS_ATTRIB_SHOW(emulate_tpws);
495DEF_TB_DEV_ATTRIB_SHOW(emulate_caw); 483DEF_CONFIGFS_ATTRIB_SHOW(emulate_caw);
496DEF_TB_DEV_ATTRIB_SHOW(emulate_3pc); 484DEF_CONFIGFS_ATTRIB_SHOW(emulate_3pc);
497DEF_TB_DEV_ATTRIB_SHOW(pi_prot_type); 485DEF_CONFIGFS_ATTRIB_SHOW(pi_prot_type);
498DEF_TB_DEV_ATTRIB_SHOW(hw_pi_prot_type); 486DEF_CONFIGFS_ATTRIB_SHOW(hw_pi_prot_type);
499DEF_TB_DEV_ATTRIB_SHOW(pi_prot_format); 487DEF_CONFIGFS_ATTRIB_SHOW(pi_prot_format);
500DEF_TB_DEV_ATTRIB_SHOW(enforce_pr_isids); 488DEF_CONFIGFS_ATTRIB_SHOW(enforce_pr_isids);
501DEF_TB_DEV_ATTRIB_SHOW(is_nonrot); 489DEF_CONFIGFS_ATTRIB_SHOW(is_nonrot);
502DEF_TB_DEV_ATTRIB_SHOW(emulate_rest_reord); 490DEF_CONFIGFS_ATTRIB_SHOW(emulate_rest_reord);
503DEF_TB_DEV_ATTRIB_SHOW(force_pr_aptpl); 491DEF_CONFIGFS_ATTRIB_SHOW(force_pr_aptpl);
504DEF_TB_DEV_ATTRIB_SHOW(hw_block_size); 492DEF_CONFIGFS_ATTRIB_SHOW(hw_block_size);
505DEF_TB_DEV_ATTRIB_SHOW(block_size); 493DEF_CONFIGFS_ATTRIB_SHOW(block_size);
506DEF_TB_DEV_ATTRIB_SHOW(hw_max_sectors); 494DEF_CONFIGFS_ATTRIB_SHOW(hw_max_sectors);
507DEF_TB_DEV_ATTRIB_SHOW(optimal_sectors); 495DEF_CONFIGFS_ATTRIB_SHOW(optimal_sectors);
508DEF_TB_DEV_ATTRIB_SHOW(hw_queue_depth); 496DEF_CONFIGFS_ATTRIB_SHOW(hw_queue_depth);
509DEF_TB_DEV_ATTRIB_SHOW(queue_depth); 497DEF_CONFIGFS_ATTRIB_SHOW(queue_depth);
510DEF_TB_DEV_ATTRIB_SHOW(max_unmap_lba_count); 498DEF_CONFIGFS_ATTRIB_SHOW(max_unmap_lba_count);
511DEF_TB_DEV_ATTRIB_SHOW(max_unmap_block_desc_count); 499DEF_CONFIGFS_ATTRIB_SHOW(max_unmap_block_desc_count);
512DEF_TB_DEV_ATTRIB_SHOW(unmap_granularity); 500DEF_CONFIGFS_ATTRIB_SHOW(unmap_granularity);
513DEF_TB_DEV_ATTRIB_SHOW(unmap_granularity_alignment); 501DEF_CONFIGFS_ATTRIB_SHOW(unmap_granularity_alignment);
514DEF_TB_DEV_ATTRIB_SHOW(max_write_same_len); 502DEF_CONFIGFS_ATTRIB_SHOW(max_write_same_len);
515 503
516#define DEF_TB_DEV_ATTRIB_STORE_U32(_name) \ 504#define DEF_CONFIGFS_ATTRIB_STORE_U32(_name) \
517static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ 505static ssize_t _name##_store(struct config_item *item, const char *page,\
518 size_t count) \ 506 size_t count) \
519{ \ 507{ \
508 struct se_dev_attrib *da = to_attrib(item); \
520 u32 val; \ 509 u32 val; \
521 int ret; \ 510 int ret; \
522 \ 511 \
@@ -527,16 +516,17 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\
527 return count; \ 516 return count; \
528} 517}
529 518
530DEF_TB_DEV_ATTRIB_STORE_U32(max_unmap_lba_count); 519DEF_CONFIGFS_ATTRIB_STORE_U32(max_unmap_lba_count);
531DEF_TB_DEV_ATTRIB_STORE_U32(max_unmap_block_desc_count); 520DEF_CONFIGFS_ATTRIB_STORE_U32(max_unmap_block_desc_count);
532DEF_TB_DEV_ATTRIB_STORE_U32(unmap_granularity); 521DEF_CONFIGFS_ATTRIB_STORE_U32(unmap_granularity);
533DEF_TB_DEV_ATTRIB_STORE_U32(unmap_granularity_alignment); 522DEF_CONFIGFS_ATTRIB_STORE_U32(unmap_granularity_alignment);
534DEF_TB_DEV_ATTRIB_STORE_U32(max_write_same_len); 523DEF_CONFIGFS_ATTRIB_STORE_U32(max_write_same_len);
535 524
536#define DEF_TB_DEV_ATTRIB_STORE_BOOL(_name) \ 525#define DEF_CONFIGFS_ATTRIB_STORE_BOOL(_name) \
537static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ 526static ssize_t _name##_store(struct config_item *item, const char *page, \
538 size_t count) \ 527 size_t count) \
539{ \ 528{ \
529 struct se_dev_attrib *da = to_attrib(item); \
540 bool flag; \ 530 bool flag; \
541 int ret; \ 531 int ret; \
542 \ 532 \
@@ -547,14 +537,14 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\
547 return count; \ 537 return count; \
548} 538}
549 539
550DEF_TB_DEV_ATTRIB_STORE_BOOL(emulate_fua_write); 540DEF_CONFIGFS_ATTRIB_STORE_BOOL(emulate_fua_write);
551DEF_TB_DEV_ATTRIB_STORE_BOOL(emulate_caw); 541DEF_CONFIGFS_ATTRIB_STORE_BOOL(emulate_caw);
552DEF_TB_DEV_ATTRIB_STORE_BOOL(emulate_3pc); 542DEF_CONFIGFS_ATTRIB_STORE_BOOL(emulate_3pc);
553DEF_TB_DEV_ATTRIB_STORE_BOOL(enforce_pr_isids); 543DEF_CONFIGFS_ATTRIB_STORE_BOOL(enforce_pr_isids);
554DEF_TB_DEV_ATTRIB_STORE_BOOL(is_nonrot); 544DEF_CONFIGFS_ATTRIB_STORE_BOOL(is_nonrot);
555 545
556#define DEF_TB_DEV_ATTRIB_STORE_STUB(_name) \ 546#define DEF_CONFIGFS_ATTRIB_STORE_STUB(_name) \
557static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ 547static ssize_t _name##_store(struct config_item *item, const char *page,\
558 size_t count) \ 548 size_t count) \
559{ \ 549{ \
560 printk_once(KERN_WARNING \ 550 printk_once(KERN_WARNING \
@@ -562,8 +552,8 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\
562 return count; \ 552 return count; \
563} 553}
564 554
565DEF_TB_DEV_ATTRIB_STORE_STUB(emulate_dpo); 555DEF_CONFIGFS_ATTRIB_STORE_STUB(emulate_dpo);
566DEF_TB_DEV_ATTRIB_STORE_STUB(emulate_fua_read); 556DEF_CONFIGFS_ATTRIB_STORE_STUB(emulate_fua_read);
567 557
568static void dev_set_t10_wwn_model_alias(struct se_device *dev) 558static void dev_set_t10_wwn_model_alias(struct se_device *dev)
569{ 559{
@@ -578,9 +568,10 @@ static void dev_set_t10_wwn_model_alias(struct se_device *dev)
578 snprintf(&dev->t10_wwn.model[0], 16, "%s", configname); 568 snprintf(&dev->t10_wwn.model[0], 16, "%s", configname);
579} 569}
580 570
581static ssize_t store_emulate_model_alias(struct se_dev_attrib *da, 571static ssize_t emulate_model_alias_store(struct config_item *item,
582 const char *page, size_t count) 572 const char *page, size_t count)
583{ 573{
574 struct se_dev_attrib *da = to_attrib(item);
584 struct se_device *dev = da->da_dev; 575 struct se_device *dev = da->da_dev;
585 bool flag; 576 bool flag;
586 int ret; 577 int ret;
@@ -606,9 +597,10 @@ static ssize_t store_emulate_model_alias(struct se_dev_attrib *da,
606 return count; 597 return count;
607} 598}
608 599
609static ssize_t store_emulate_write_cache(struct se_dev_attrib *da, 600static ssize_t emulate_write_cache_store(struct config_item *item,
610 const char *page, size_t count) 601 const char *page, size_t count)
611{ 602{
603 struct se_dev_attrib *da = to_attrib(item);
612 bool flag; 604 bool flag;
613 int ret; 605 int ret;
614 606
@@ -627,9 +619,10 @@ static ssize_t store_emulate_write_cache(struct se_dev_attrib *da,
627 return count; 619 return count;
628} 620}
629 621
630static ssize_t store_emulate_ua_intlck_ctrl(struct se_dev_attrib *da, 622static ssize_t emulate_ua_intlck_ctrl_store(struct config_item *item,
631 const char *page, size_t count) 623 const char *page, size_t count)
632{ 624{
625 struct se_dev_attrib *da = to_attrib(item);
633 u32 val; 626 u32 val;
634 int ret; 627 int ret;
635 628
@@ -654,9 +647,10 @@ static ssize_t store_emulate_ua_intlck_ctrl(struct se_dev_attrib *da,
654 return count; 647 return count;
655} 648}
656 649
657static ssize_t store_emulate_tas(struct se_dev_attrib *da, 650static ssize_t emulate_tas_store(struct config_item *item,
658 const char *page, size_t count) 651 const char *page, size_t count)
659{ 652{
653 struct se_dev_attrib *da = to_attrib(item);
660 bool flag; 654 bool flag;
661 int ret; 655 int ret;
662 656
@@ -677,9 +671,10 @@ static ssize_t store_emulate_tas(struct se_dev_attrib *da,
677 return count; 671 return count;
678} 672}
679 673
680static ssize_t store_emulate_tpu(struct se_dev_attrib *da, 674static ssize_t emulate_tpu_store(struct config_item *item,
681 const char *page, size_t count) 675 const char *page, size_t count)
682{ 676{
677 struct se_dev_attrib *da = to_attrib(item);
683 bool flag; 678 bool flag;
684 int ret; 679 int ret;
685 680
@@ -702,9 +697,10 @@ static ssize_t store_emulate_tpu(struct se_dev_attrib *da,
702 return count; 697 return count;
703} 698}
704 699
705static ssize_t store_emulate_tpws(struct se_dev_attrib *da, 700static ssize_t emulate_tpws_store(struct config_item *item,
706 const char *page, size_t count) 701 const char *page, size_t count)
707{ 702{
703 struct se_dev_attrib *da = to_attrib(item);
708 bool flag; 704 bool flag;
709 int ret; 705 int ret;
710 706
@@ -727,9 +723,10 @@ static ssize_t store_emulate_tpws(struct se_dev_attrib *da,
727 return count; 723 return count;
728} 724}
729 725
730static ssize_t store_pi_prot_type(struct se_dev_attrib *da, 726static ssize_t pi_prot_type_store(struct config_item *item,
731 const char *page, size_t count) 727 const char *page, size_t count)
732{ 728{
729 struct se_dev_attrib *da = to_attrib(item);
733 int old_prot = da->pi_prot_type, ret; 730 int old_prot = da->pi_prot_type, ret;
734 struct se_device *dev = da->da_dev; 731 struct se_device *dev = da->da_dev;
735 u32 flag; 732 u32 flag;
@@ -787,9 +784,10 @@ static ssize_t store_pi_prot_type(struct se_dev_attrib *da,
787 return count; 784 return count;
788} 785}
789 786
790static ssize_t store_pi_prot_format(struct se_dev_attrib *da, 787static ssize_t pi_prot_format_store(struct config_item *item,
791 const char *page, size_t count) 788 const char *page, size_t count)
792{ 789{
790 struct se_dev_attrib *da = to_attrib(item);
793 struct se_device *dev = da->da_dev; 791 struct se_device *dev = da->da_dev;
794 bool flag; 792 bool flag;
795 int ret; 793 int ret;
@@ -824,9 +822,10 @@ static ssize_t store_pi_prot_format(struct se_dev_attrib *da,
824 return count; 822 return count;
825} 823}
826 824
827static ssize_t store_force_pr_aptpl(struct se_dev_attrib *da, 825static ssize_t force_pr_aptpl_store(struct config_item *item,
828 const char *page, size_t count) 826 const char *page, size_t count)
829{ 827{
828 struct se_dev_attrib *da = to_attrib(item);
830 bool flag; 829 bool flag;
831 int ret; 830 int ret;
832 831
@@ -845,9 +844,10 @@ static ssize_t store_force_pr_aptpl(struct se_dev_attrib *da,
845 return count; 844 return count;
846} 845}
847 846
848static ssize_t store_emulate_rest_reord(struct se_dev_attrib *da, 847static ssize_t emulate_rest_reord_store(struct config_item *item,
849 const char *page, size_t count) 848 const char *page, size_t count)
850{ 849{
850 struct se_dev_attrib *da = to_attrib(item);
851 bool flag; 851 bool flag;
852 int ret; 852 int ret;
853 853
@@ -869,9 +869,10 @@ static ssize_t store_emulate_rest_reord(struct se_dev_attrib *da,
869/* 869/*
870 * Note, this can only be called on unexported SE Device Object. 870 * Note, this can only be called on unexported SE Device Object.
871 */ 871 */
872static ssize_t store_queue_depth(struct se_dev_attrib *da, 872static ssize_t queue_depth_store(struct config_item *item,
873 const char *page, size_t count) 873 const char *page, size_t count)
874{ 874{
875 struct se_dev_attrib *da = to_attrib(item);
875 struct se_device *dev = da->da_dev; 876 struct se_device *dev = da->da_dev;
876 u32 val; 877 u32 val;
877 int ret; 878 int ret;
@@ -905,9 +906,10 @@ static ssize_t store_queue_depth(struct se_dev_attrib *da,
905 return count; 906 return count;
906} 907}
907 908
908static ssize_t store_optimal_sectors(struct se_dev_attrib *da, 909static ssize_t optimal_sectors_store(struct config_item *item,
909 const char *page, size_t count) 910 const char *page, size_t count)
910{ 911{
912 struct se_dev_attrib *da = to_attrib(item);
911 u32 val; 913 u32 val;
912 int ret; 914 int ret;
913 915
@@ -934,9 +936,10 @@ static ssize_t store_optimal_sectors(struct se_dev_attrib *da,
934 return count; 936 return count;
935} 937}
936 938
937static ssize_t store_block_size(struct se_dev_attrib *da, 939static ssize_t block_size_store(struct config_item *item,
938 const char *page, size_t count) 940 const char *page, size_t count)
939{ 941{
942 struct se_dev_attrib *da = to_attrib(item);
940 u32 val; 943 u32 val;
941 int ret; 944 int ret;
942 945
@@ -967,50 +970,35 @@ static ssize_t store_block_size(struct se_dev_attrib *da,
967 return count; 970 return count;
968} 971}
969 972
970CONFIGFS_EATTR_STRUCT(target_backend_dev_attrib, se_dev_attrib); 973CONFIGFS_ATTR(, emulate_model_alias);
971#define TB_DEV_ATTR(_backend, _name, _mode) \ 974CONFIGFS_ATTR(, emulate_dpo);
972static struct target_backend_dev_attrib_attribute _backend##_dev_attrib_##_name = \ 975CONFIGFS_ATTR(, emulate_fua_write);
973 __CONFIGFS_EATTR(_name, _mode, \ 976CONFIGFS_ATTR(, emulate_fua_read);
974 show_##_name, \ 977CONFIGFS_ATTR(, emulate_write_cache);
975 store_##_name); 978CONFIGFS_ATTR(, emulate_ua_intlck_ctrl);
976 979CONFIGFS_ATTR(, emulate_tas);
977#define TB_DEV_ATTR_RO(_backend, _name) \ 980CONFIGFS_ATTR(, emulate_tpu);
978static struct target_backend_dev_attrib_attribute _backend##_dev_attrib_##_name = \ 981CONFIGFS_ATTR(, emulate_tpws);
979 __CONFIGFS_EATTR_RO(_name, \ 982CONFIGFS_ATTR(, emulate_caw);
980 show_##_name); 983CONFIGFS_ATTR(, emulate_3pc);
981 984CONFIGFS_ATTR(, pi_prot_type);
982TB_DEV_ATTR(target_core, emulate_model_alias, S_IRUGO | S_IWUSR); 985CONFIGFS_ATTR_RO(, hw_pi_prot_type);
983TB_DEV_ATTR(target_core, emulate_dpo, S_IRUGO | S_IWUSR); 986CONFIGFS_ATTR(, pi_prot_format);
984TB_DEV_ATTR(target_core, emulate_fua_write, S_IRUGO | S_IWUSR); 987CONFIGFS_ATTR(, enforce_pr_isids);
985TB_DEV_ATTR(target_core, emulate_fua_read, S_IRUGO | S_IWUSR); 988CONFIGFS_ATTR(, is_nonrot);
986TB_DEV_ATTR(target_core, emulate_write_cache, S_IRUGO | S_IWUSR); 989CONFIGFS_ATTR(, emulate_rest_reord);
987TB_DEV_ATTR(target_core, emulate_ua_intlck_ctrl, S_IRUGO | S_IWUSR); 990CONFIGFS_ATTR(, force_pr_aptpl);
988TB_DEV_ATTR(target_core, emulate_tas, S_IRUGO | S_IWUSR); 991CONFIGFS_ATTR_RO(, hw_block_size);
989TB_DEV_ATTR(target_core, emulate_tpu, S_IRUGO | S_IWUSR); 992CONFIGFS_ATTR(, block_size);
990TB_DEV_ATTR(target_core, emulate_tpws, S_IRUGO | S_IWUSR); 993CONFIGFS_ATTR_RO(, hw_max_sectors);
991TB_DEV_ATTR(target_core, emulate_caw, S_IRUGO | S_IWUSR); 994CONFIGFS_ATTR(, optimal_sectors);
992TB_DEV_ATTR(target_core, emulate_3pc, S_IRUGO | S_IWUSR); 995CONFIGFS_ATTR_RO(, hw_queue_depth);
993TB_DEV_ATTR(target_core, pi_prot_type, S_IRUGO | S_IWUSR); 996CONFIGFS_ATTR(, queue_depth);
994TB_DEV_ATTR_RO(target_core, hw_pi_prot_type); 997CONFIGFS_ATTR(, max_unmap_lba_count);
995TB_DEV_ATTR(target_core, pi_prot_format, S_IRUGO | S_IWUSR); 998CONFIGFS_ATTR(, max_unmap_block_desc_count);
996TB_DEV_ATTR(target_core, enforce_pr_isids, S_IRUGO | S_IWUSR); 999CONFIGFS_ATTR(, unmap_granularity);
997TB_DEV_ATTR(target_core, is_nonrot, S_IRUGO | S_IWUSR); 1000CONFIGFS_ATTR(, unmap_granularity_alignment);
998TB_DEV_ATTR(target_core, emulate_rest_reord, S_IRUGO | S_IWUSR); 1001CONFIGFS_ATTR(, max_write_same_len);
999TB_DEV_ATTR(target_core, force_pr_aptpl, S_IRUGO | S_IWUSR)
1000TB_DEV_ATTR_RO(target_core, hw_block_size);
1001TB_DEV_ATTR(target_core, block_size, S_IRUGO | S_IWUSR)
1002TB_DEV_ATTR_RO(target_core, hw_max_sectors);
1003TB_DEV_ATTR(target_core, optimal_sectors, S_IRUGO | S_IWUSR);
1004TB_DEV_ATTR_RO(target_core, hw_queue_depth);
1005TB_DEV_ATTR(target_core, queue_depth, S_IRUGO | S_IWUSR);
1006TB_DEV_ATTR(target_core, max_unmap_lba_count, S_IRUGO | S_IWUSR);
1007TB_DEV_ATTR(target_core, max_unmap_block_desc_count, S_IRUGO | S_IWUSR);
1008TB_DEV_ATTR(target_core, unmap_granularity, S_IRUGO | S_IWUSR);
1009TB_DEV_ATTR(target_core, unmap_granularity_alignment, S_IRUGO | S_IWUSR);
1010TB_DEV_ATTR(target_core, max_write_same_len, S_IRUGO | S_IWUSR);
1011
1012CONFIGFS_EATTR_STRUCT(target_core_dev_attrib, se_dev_attrib);
1013CONFIGFS_EATTR_OPS(target_core_dev_attrib, se_dev_attrib, da_group);
1014 1002
1015/* 1003/*
1016 * dev_attrib attributes for devices using the target core SBC/SPC 1004 * 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 * these. 1006 * these.
1019 */ 1007 */
1020struct configfs_attribute *sbc_attrib_attrs[] = { 1008struct configfs_attribute *sbc_attrib_attrs[] = {
1021 &target_core_dev_attrib_emulate_model_alias.attr, 1009 &attr_emulate_model_alias,
1022 &target_core_dev_attrib_emulate_dpo.attr, 1010 &attr_emulate_dpo,
1023 &target_core_dev_attrib_emulate_fua_write.attr, 1011 &attr_emulate_fua_write,
1024 &target_core_dev_attrib_emulate_fua_read.attr, 1012 &attr_emulate_fua_read,
1025 &target_core_dev_attrib_emulate_write_cache.attr, 1013 &attr_emulate_write_cache,
1026 &target_core_dev_attrib_emulate_ua_intlck_ctrl.attr, 1014 &attr_emulate_ua_intlck_ctrl,
1027 &target_core_dev_attrib_emulate_tas.attr, 1015 &attr_emulate_tas,
1028 &target_core_dev_attrib_emulate_tpu.attr, 1016 &attr_emulate_tpu,
1029 &target_core_dev_attrib_emulate_tpws.attr, 1017 &attr_emulate_tpws,
1030 &target_core_dev_attrib_emulate_caw.attr, 1018 &attr_emulate_caw,
1031 &target_core_dev_attrib_emulate_3pc.attr, 1019 &attr_emulate_3pc,
1032 &target_core_dev_attrib_pi_prot_type.attr, 1020 &attr_pi_prot_type,
1033 &target_core_dev_attrib_hw_pi_prot_type.attr, 1021 &attr_hw_pi_prot_type,
1034 &target_core_dev_attrib_pi_prot_format.attr, 1022 &attr_pi_prot_format,
1035 &target_core_dev_attrib_enforce_pr_isids.attr, 1023 &attr_enforce_pr_isids,
1036 &target_core_dev_attrib_is_nonrot.attr, 1024 &attr_is_nonrot,
1037 &target_core_dev_attrib_emulate_rest_reord.attr, 1025 &attr_emulate_rest_reord,
1038 &target_core_dev_attrib_force_pr_aptpl.attr, 1026 &attr_force_pr_aptpl,
1039 &target_core_dev_attrib_hw_block_size.attr, 1027 &attr_hw_block_size,
1040 &target_core_dev_attrib_block_size.attr, 1028 &attr_block_size,
1041 &target_core_dev_attrib_hw_max_sectors.attr, 1029 &attr_hw_max_sectors,
1042 &target_core_dev_attrib_optimal_sectors.attr, 1030 &attr_optimal_sectors,
1043 &target_core_dev_attrib_hw_queue_depth.attr, 1031 &attr_hw_queue_depth,
1044 &target_core_dev_attrib_queue_depth.attr, 1032 &attr_queue_depth,
1045 &target_core_dev_attrib_max_unmap_lba_count.attr, 1033 &attr_max_unmap_lba_count,
1046 &target_core_dev_attrib_max_unmap_block_desc_count.attr, 1034 &attr_max_unmap_block_desc_count,
1047 &target_core_dev_attrib_unmap_granularity.attr, 1035 &attr_unmap_granularity,
1048 &target_core_dev_attrib_unmap_granularity_alignment.attr, 1036 &attr_unmap_granularity_alignment,
1049 &target_core_dev_attrib_max_write_same_len.attr, 1037 &attr_max_write_same_len,
1050 NULL, 1038 NULL,
1051}; 1039};
1052EXPORT_SYMBOL(sbc_attrib_attrs); 1040EXPORT_SYMBOL(sbc_attrib_attrs);
1053 1041
1054TB_DEV_ATTR_RO(target_pt, hw_pi_prot_type);
1055TB_DEV_ATTR_RO(target_pt, hw_block_size);
1056TB_DEV_ATTR_RO(target_pt, hw_max_sectors);
1057TB_DEV_ATTR_RO(target_pt, hw_queue_depth);
1058
1059/* 1042/*
1060 * Minimal dev_attrib attributes for devices passing through CDBs. 1043 * Minimal dev_attrib attributes for devices passing through CDBs.
1061 * In this case we only provide a few read-only attributes for 1044 * In this case we only provide a few read-only attributes for
1062 * backwards compatibility. 1045 * backwards compatibility.
1063 */ 1046 */
1064struct configfs_attribute *passthrough_attrib_attrs[] = { 1047struct configfs_attribute *passthrough_attrib_attrs[] = {
1065 &target_pt_dev_attrib_hw_pi_prot_type.attr, 1048 &attr_hw_pi_prot_type,
1066 &target_pt_dev_attrib_hw_block_size.attr, 1049 &attr_hw_block_size,
1067 &target_pt_dev_attrib_hw_max_sectors.attr, 1050 &attr_hw_max_sectors,
1068 &target_pt_dev_attrib_hw_queue_depth.attr, 1051 &attr_hw_queue_depth,
1069 NULL, 1052 NULL,
1070}; 1053};
1071EXPORT_SYMBOL(passthrough_attrib_attrs); 1054EXPORT_SYMBOL(passthrough_attrib_attrs);
1072 1055
1073static struct configfs_item_operations target_core_dev_attrib_ops = { 1056TB_CIT_SETUP_DRV(dev_attrib, NULL, NULL);
1074 .show_attribute = target_core_dev_attrib_attr_show,
1075 .store_attribute = target_core_dev_attrib_attr_store,
1076};
1077
1078TB_CIT_SETUP_DRV(dev_attrib, &target_core_dev_attrib_ops, NULL);
1079 1057
1080/* End functions for struct config_item_type tb_dev_attrib_cit */ 1058/* End functions for struct config_item_type tb_dev_attrib_cit */
1081 1059
1082/* Start functions for struct config_item_type tb_dev_wwn_cit */ 1060/* Start functions for struct config_item_type tb_dev_wwn_cit */
1083 1061
1084CONFIGFS_EATTR_STRUCT(target_core_dev_wwn, t10_wwn); 1062static struct t10_wwn *to_t10_wwn(struct config_item *item)
1085#define SE_DEV_WWN_ATTR(_name, _mode) \ 1063{
1086static struct target_core_dev_wwn_attribute target_core_dev_wwn_##_name = \ 1064 return container_of(to_config_group(item), struct t10_wwn, t10_wwn_group);
1087 __CONFIGFS_EATTR(_name, _mode, \ 1065}
1088 target_core_dev_wwn_show_attr_##_name, \
1089 target_core_dev_wwn_store_attr_##_name);
1090
1091#define SE_DEV_WWN_ATTR_RO(_name); \
1092do { \
1093 static struct target_core_dev_wwn_attribute \
1094 target_core_dev_wwn_##_name = \
1095 __CONFIGFS_EATTR_RO(_name, \
1096 target_core_dev_wwn_show_attr_##_name); \
1097} while (0);
1098 1066
1099/* 1067/*
1100 * VPD page 0x80 Unit serial 1068 * VPD page 0x80 Unit serial
1101 */ 1069 */
1102static ssize_t target_core_dev_wwn_show_attr_vpd_unit_serial( 1070static ssize_t target_wwn_vpd_unit_serial_show(struct config_item *item,
1103 struct t10_wwn *t10_wwn, 1071 char *page)
1104 char *page)
1105{ 1072{
1106 return sprintf(page, "T10 VPD Unit Serial Number: %s\n", 1073 return sprintf(page, "T10 VPD Unit Serial Number: %s\n",
1107 &t10_wwn->unit_serial[0]); 1074 &to_t10_wwn(item)->unit_serial[0]);
1108} 1075}
1109 1076
1110static ssize_t target_core_dev_wwn_store_attr_vpd_unit_serial( 1077static ssize_t target_wwn_vpd_unit_serial_store(struct config_item *item,
1111 struct t10_wwn *t10_wwn, 1078 const char *page, size_t count)
1112 const char *page,
1113 size_t count)
1114{ 1079{
1080 struct t10_wwn *t10_wwn = to_t10_wwn(item);
1115 struct se_device *dev = t10_wwn->t10_dev; 1081 struct se_device *dev = t10_wwn->t10_dev;
1116 unsigned char buf[INQUIRY_VPD_SERIAL_LEN]; 1082 unsigned char buf[INQUIRY_VPD_SERIAL_LEN];
1117 1083
@@ -1167,15 +1133,13 @@ static ssize_t target_core_dev_wwn_store_attr_vpd_unit_serial(
1167 return count; 1133 return count;
1168} 1134}
1169 1135
1170SE_DEV_WWN_ATTR(vpd_unit_serial, S_IRUGO | S_IWUSR);
1171
1172/* 1136/*
1173 * VPD page 0x83 Protocol Identifier 1137 * VPD page 0x83 Protocol Identifier
1174 */ 1138 */
1175static ssize_t target_core_dev_wwn_show_attr_vpd_protocol_identifier( 1139static ssize_t target_wwn_vpd_protocol_identifier_show(struct config_item *item,
1176 struct t10_wwn *t10_wwn, 1140 char *page)
1177 char *page)
1178{ 1141{
1142 struct t10_wwn *t10_wwn = to_t10_wwn(item);
1179 struct t10_vpd *vpd; 1143 struct t10_vpd *vpd;
1180 unsigned char buf[VPD_TMP_BUF_SIZE]; 1144 unsigned char buf[VPD_TMP_BUF_SIZE];
1181 ssize_t len = 0; 1145 ssize_t len = 0;
@@ -1199,25 +1163,15 @@ static ssize_t target_core_dev_wwn_show_attr_vpd_protocol_identifier(
1199 return len; 1163 return len;
1200} 1164}
1201 1165
1202static ssize_t target_core_dev_wwn_store_attr_vpd_protocol_identifier(
1203 struct t10_wwn *t10_wwn,
1204 const char *page,
1205 size_t count)
1206{
1207 return -ENOSYS;
1208}
1209
1210SE_DEV_WWN_ATTR(vpd_protocol_identifier, S_IRUGO | S_IWUSR);
1211
1212/* 1166/*
1213 * Generic wrapper for dumping VPD identifiers by association. 1167 * Generic wrapper for dumping VPD identifiers by association.
1214 */ 1168 */
1215#define DEF_DEV_WWN_ASSOC_SHOW(_name, _assoc) \ 1169#define DEF_DEV_WWN_ASSOC_SHOW(_name, _assoc) \
1216static ssize_t target_core_dev_wwn_show_attr_##_name( \ 1170static ssize_t target_wwn_##_name##_show(struct config_item *item, \
1217 struct t10_wwn *t10_wwn, \ 1171 char *page) \
1218 char *page) \
1219{ \ 1172{ \
1220 struct t10_vpd *vpd; \ 1173 struct t10_wwn *t10_wwn = to_t10_wwn(item); \
1174 struct t10_vpd *vpd; \
1221 unsigned char buf[VPD_TMP_BUF_SIZE]; \ 1175 unsigned char buf[VPD_TMP_BUF_SIZE]; \
1222 ssize_t len = 0; \ 1176 ssize_t len = 0; \
1223 \ 1177 \
@@ -1249,84 +1203,39 @@ static ssize_t target_core_dev_wwn_show_attr_##_name( \
1249 return len; \ 1203 return len; \
1250} 1204}
1251 1205
1252/* 1206/* VPD page 0x83 Association: Logical Unit */
1253 * VPD page 0x83 Association: Logical Unit
1254 */
1255DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_logical_unit, 0x00); 1207DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_logical_unit, 0x00);
1256 1208/* VPD page 0x83 Association: Target Port */
1257static ssize_t target_core_dev_wwn_store_attr_vpd_assoc_logical_unit(
1258 struct t10_wwn *t10_wwn,
1259 const char *page,
1260 size_t count)
1261{
1262 return -ENOSYS;
1263}
1264
1265SE_DEV_WWN_ATTR(vpd_assoc_logical_unit, S_IRUGO | S_IWUSR);
1266
1267/*
1268 * VPD page 0x83 Association: Target Port
1269 */
1270DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_target_port, 0x10); 1209DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_target_port, 0x10);
1271 1210/* VPD page 0x83 Association: SCSI Target Device */
1272static ssize_t target_core_dev_wwn_store_attr_vpd_assoc_target_port(
1273 struct t10_wwn *t10_wwn,
1274 const char *page,
1275 size_t count)
1276{
1277 return -ENOSYS;
1278}
1279
1280SE_DEV_WWN_ATTR(vpd_assoc_target_port, S_IRUGO | S_IWUSR);
1281
1282/*
1283 * VPD page 0x83 Association: SCSI Target Device
1284 */
1285DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_scsi_target_device, 0x20); 1211DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_scsi_target_device, 0x20);
1286 1212
1287static ssize_t target_core_dev_wwn_store_attr_vpd_assoc_scsi_target_device( 1213CONFIGFS_ATTR(target_wwn_, vpd_unit_serial);
1288 struct t10_wwn *t10_wwn, 1214CONFIGFS_ATTR_RO(target_wwn_, vpd_protocol_identifier);
1289 const char *page, 1215CONFIGFS_ATTR_RO(target_wwn_, vpd_assoc_logical_unit);
1290 size_t count) 1216CONFIGFS_ATTR_RO(target_wwn_, vpd_assoc_target_port);
1291{ 1217CONFIGFS_ATTR_RO(target_wwn_, vpd_assoc_scsi_target_device);
1292 return -ENOSYS;
1293}
1294
1295SE_DEV_WWN_ATTR(vpd_assoc_scsi_target_device, S_IRUGO | S_IWUSR);
1296
1297CONFIGFS_EATTR_OPS(target_core_dev_wwn, t10_wwn, t10_wwn_group);
1298 1218
1299static struct configfs_attribute *target_core_dev_wwn_attrs[] = { 1219static struct configfs_attribute *target_core_dev_wwn_attrs[] = {
1300 &target_core_dev_wwn_vpd_unit_serial.attr, 1220 &target_wwn_attr_vpd_unit_serial,
1301 &target_core_dev_wwn_vpd_protocol_identifier.attr, 1221 &target_wwn_attr_vpd_protocol_identifier,
1302 &target_core_dev_wwn_vpd_assoc_logical_unit.attr, 1222 &target_wwn_attr_vpd_assoc_logical_unit,
1303 &target_core_dev_wwn_vpd_assoc_target_port.attr, 1223 &target_wwn_attr_vpd_assoc_target_port,
1304 &target_core_dev_wwn_vpd_assoc_scsi_target_device.attr, 1224 &target_wwn_attr_vpd_assoc_scsi_target_device,
1305 NULL, 1225 NULL,
1306}; 1226};
1307 1227
1308static struct configfs_item_operations target_core_dev_wwn_ops = { 1228TB_CIT_SETUP(dev_wwn, NULL, NULL, target_core_dev_wwn_attrs);
1309 .show_attribute = target_core_dev_wwn_attr_show,
1310 .store_attribute = target_core_dev_wwn_attr_store,
1311};
1312
1313TB_CIT_SETUP(dev_wwn, &target_core_dev_wwn_ops, NULL, target_core_dev_wwn_attrs);
1314 1229
1315/* End functions for struct config_item_type tb_dev_wwn_cit */ 1230/* End functions for struct config_item_type tb_dev_wwn_cit */
1316 1231
1317/* Start functions for struct config_item_type tb_dev_pr_cit */ 1232/* Start functions for struct config_item_type tb_dev_pr_cit */
1318 1233
1319CONFIGFS_EATTR_STRUCT(target_core_dev_pr, se_device); 1234static struct se_device *pr_to_dev(struct config_item *item)
1320#define SE_DEV_PR_ATTR(_name, _mode) \ 1235{
1321static struct target_core_dev_pr_attribute target_core_dev_pr_##_name = \ 1236 return container_of(to_config_group(item), struct se_device,
1322 __CONFIGFS_EATTR(_name, _mode, \ 1237 dev_pr_group);
1323 target_core_dev_pr_show_attr_##_name, \ 1238}
1324 target_core_dev_pr_store_attr_##_name);
1325
1326#define SE_DEV_PR_ATTR_RO(_name); \
1327static struct target_core_dev_pr_attribute target_core_dev_pr_##_name = \
1328 __CONFIGFS_EATTR_RO(_name, \
1329 target_core_dev_pr_show_attr_##_name);
1330 1239
1331static ssize_t target_core_dev_pr_show_spc3_res(struct se_device *dev, 1240static ssize_t target_core_dev_pr_show_spc3_res(struct se_device *dev,
1332 char *page) 1241 char *page)
@@ -1367,9 +1276,9 @@ static ssize_t target_core_dev_pr_show_spc2_res(struct se_device *dev,
1367 return len; 1276 return len;
1368} 1277}
1369 1278
1370static ssize_t target_core_dev_pr_show_attr_res_holder(struct se_device *dev, 1279static ssize_t target_pr_res_holder_show(struct config_item *item, char *page)
1371 char *page)
1372{ 1280{
1281 struct se_device *dev = pr_to_dev(item);
1373 int ret; 1282 int ret;
1374 1283
1375 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) 1284 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 return ret; 1293 return ret;
1385} 1294}
1386 1295
1387SE_DEV_PR_ATTR_RO(res_holder); 1296static ssize_t target_pr_res_pr_all_tgt_pts_show(struct config_item *item,
1388 1297 char *page)
1389static ssize_t target_core_dev_pr_show_attr_res_pr_all_tgt_pts(
1390 struct se_device *dev, char *page)
1391{ 1298{
1299 struct se_device *dev = pr_to_dev(item);
1392 ssize_t len = 0; 1300 ssize_t len = 0;
1393 1301
1394 spin_lock(&dev->dev_reservation_lock); 1302 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 return len; 1314 return len;
1407} 1315}
1408 1316
1409SE_DEV_PR_ATTR_RO(res_pr_all_tgt_pts); 1317static ssize_t target_pr_res_pr_generation_show(struct config_item *item,
1410 1318 char *page)
1411static ssize_t target_core_dev_pr_show_attr_res_pr_generation(
1412 struct se_device *dev, char *page)
1413{ 1319{
1414 return sprintf(page, "0x%08x\n", dev->t10_pr.pr_generation); 1320 return sprintf(page, "0x%08x\n", pr_to_dev(item)->t10_pr.pr_generation);
1415} 1321}
1416 1322
1417SE_DEV_PR_ATTR_RO(res_pr_generation);
1418 1323
1419/* 1324static ssize_t target_pr_res_pr_holder_tg_port_show(struct config_item *item,
1420 * res_pr_holder_tg_port 1325 char *page)
1421 */
1422static ssize_t target_core_dev_pr_show_attr_res_pr_holder_tg_port(
1423 struct se_device *dev, char *page)
1424{ 1326{
1327 struct se_device *dev = pr_to_dev(item);
1425 struct se_node_acl *se_nacl; 1328 struct se_node_acl *se_nacl;
1426 struct se_portal_group *se_tpg; 1329 struct se_portal_group *se_tpg;
1427 struct t10_pr_registration *pr_reg; 1330 struct t10_pr_registration *pr_reg;
@@ -1453,11 +1356,11 @@ out_unlock:
1453 return len; 1356 return len;
1454} 1357}
1455 1358
1456SE_DEV_PR_ATTR_RO(res_pr_holder_tg_port);
1457 1359
1458static ssize_t target_core_dev_pr_show_attr_res_pr_registered_i_pts( 1360static ssize_t target_pr_res_pr_registered_i_pts_show(struct config_item *item,
1459 struct se_device *dev, char *page) 1361 char *page)
1460{ 1362{
1363 struct se_device *dev = pr_to_dev(item);
1461 const struct target_core_fabric_ops *tfo; 1364 const struct target_core_fabric_ops *tfo;
1462 struct t10_pr_registration *pr_reg; 1365 struct t10_pr_registration *pr_reg;
1463 unsigned char buf[384]; 1366 unsigned char buf[384];
@@ -1495,11 +1398,9 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_registered_i_pts(
1495 return len; 1398 return len;
1496} 1399}
1497 1400
1498SE_DEV_PR_ATTR_RO(res_pr_registered_i_pts); 1401static ssize_t target_pr_res_pr_type_show(struct config_item *item, char *page)
1499
1500static ssize_t target_core_dev_pr_show_attr_res_pr_type(
1501 struct se_device *dev, char *page)
1502{ 1402{
1403 struct se_device *dev = pr_to_dev(item);
1503 struct t10_pr_registration *pr_reg; 1404 struct t10_pr_registration *pr_reg;
1504 ssize_t len = 0; 1405 ssize_t len = 0;
1505 1406
@@ -1516,11 +1417,10 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_type(
1516 return len; 1417 return len;
1517} 1418}
1518 1419
1519SE_DEV_PR_ATTR_RO(res_pr_type); 1420static ssize_t target_pr_res_type_show(struct config_item *item, char *page)
1520
1521static ssize_t target_core_dev_pr_show_attr_res_type(
1522 struct se_device *dev, char *page)
1523{ 1421{
1422 struct se_device *dev = pr_to_dev(item);
1423
1524 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) 1424 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
1525 return sprintf(page, "SPC_PASSTHROUGH\n"); 1425 return sprintf(page, "SPC_PASSTHROUGH\n");
1526 else if (dev->dev_reservation_flags & DRF_SPC2_RESERVATIONS) 1426 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 return sprintf(page, "SPC3_PERSISTENT_RESERVATIONS\n"); 1429 return sprintf(page, "SPC3_PERSISTENT_RESERVATIONS\n");
1530} 1430}
1531 1431
1532SE_DEV_PR_ATTR_RO(res_type); 1432static ssize_t target_pr_res_aptpl_active_show(struct config_item *item,
1533 1433 char *page)
1534static ssize_t target_core_dev_pr_show_attr_res_aptpl_active(
1535 struct se_device *dev, char *page)
1536{ 1434{
1435 struct se_device *dev = pr_to_dev(item);
1436
1537 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) 1437 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
1538 return 0; 1438 return 0;
1539 1439
@@ -1541,14 +1441,11 @@ static ssize_t target_core_dev_pr_show_attr_res_aptpl_active(
1541 (dev->t10_pr.pr_aptpl_active) ? "Activated" : "Disabled"); 1441 (dev->t10_pr.pr_aptpl_active) ? "Activated" : "Disabled");
1542} 1442}
1543 1443
1544SE_DEV_PR_ATTR_RO(res_aptpl_active); 1444static ssize_t target_pr_res_aptpl_metadata_show(struct config_item *item,
1545 1445 char *page)
1546/*
1547 * res_aptpl_metadata
1548 */
1549static ssize_t target_core_dev_pr_show_attr_res_aptpl_metadata(
1550 struct se_device *dev, char *page)
1551{ 1446{
1447 struct se_device *dev = pr_to_dev(item);
1448
1552 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) 1449 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
1553 return 0; 1450 return 0;
1554 1451
@@ -1580,11 +1477,10 @@ static match_table_t tokens = {
1580 {Opt_err, NULL} 1477 {Opt_err, NULL}
1581}; 1478};
1582 1479
1583static ssize_t target_core_dev_pr_store_attr_res_aptpl_metadata( 1480static ssize_t target_pr_res_aptpl_metadata_store(struct config_item *item,
1584 struct se_device *dev, 1481 const char *page, size_t count)
1585 const char *page,
1586 size_t count)
1587{ 1482{
1483 struct se_device *dev = pr_to_dev(item);
1588 unsigned char *i_fabric = NULL, *i_port = NULL, *isid = NULL; 1484 unsigned char *i_fabric = NULL, *i_port = NULL, *isid = NULL;
1589 unsigned char *t_fabric = NULL, *t_port = NULL; 1485 unsigned char *t_fabric = NULL, *t_port = NULL;
1590 char *orig, *ptr, *opts; 1486 char *orig, *ptr, *opts;
@@ -1765,37 +1661,44 @@ out:
1765 return (ret == 0) ? count : ret; 1661 return (ret == 0) ? count : ret;
1766} 1662}
1767 1663
1768SE_DEV_PR_ATTR(res_aptpl_metadata, S_IRUGO | S_IWUSR);
1769 1664
1770CONFIGFS_EATTR_OPS(target_core_dev_pr, se_device, dev_pr_group); 1665CONFIGFS_ATTR_RO(target_pr_, res_holder);
1666CONFIGFS_ATTR_RO(target_pr_, res_pr_all_tgt_pts);
1667CONFIGFS_ATTR_RO(target_pr_, res_pr_generation);
1668CONFIGFS_ATTR_RO(target_pr_, res_pr_holder_tg_port);
1669CONFIGFS_ATTR_RO(target_pr_, res_pr_registered_i_pts);
1670CONFIGFS_ATTR_RO(target_pr_, res_pr_type);
1671CONFIGFS_ATTR_RO(target_pr_, res_type);
1672CONFIGFS_ATTR_RO(target_pr_, res_aptpl_active);
1673CONFIGFS_ATTR(target_pr_, res_aptpl_metadata);
1771 1674
1772static struct configfs_attribute *target_core_dev_pr_attrs[] = { 1675static struct configfs_attribute *target_core_dev_pr_attrs[] = {
1773 &target_core_dev_pr_res_holder.attr, 1676 &target_pr_attr_res_holder,
1774 &target_core_dev_pr_res_pr_all_tgt_pts.attr, 1677 &target_pr_attr_res_pr_all_tgt_pts,
1775 &target_core_dev_pr_res_pr_generation.attr, 1678 &target_pr_attr_res_pr_generation,
1776 &target_core_dev_pr_res_pr_holder_tg_port.attr, 1679 &target_pr_attr_res_pr_holder_tg_port,
1777 &target_core_dev_pr_res_pr_registered_i_pts.attr, 1680 &target_pr_attr_res_pr_registered_i_pts,
1778 &target_core_dev_pr_res_pr_type.attr, 1681 &target_pr_attr_res_pr_type,
1779 &target_core_dev_pr_res_type.attr, 1682 &target_pr_attr_res_type,
1780 &target_core_dev_pr_res_aptpl_active.attr, 1683 &target_pr_attr_res_aptpl_active,
1781 &target_core_dev_pr_res_aptpl_metadata.attr, 1684 &target_pr_attr_res_aptpl_metadata,
1782 NULL, 1685 NULL,
1783}; 1686};
1784 1687
1785static struct configfs_item_operations target_core_dev_pr_ops = { 1688TB_CIT_SETUP(dev_pr, NULL, NULL, target_core_dev_pr_attrs);
1786 .show_attribute = target_core_dev_pr_attr_show,
1787 .store_attribute = target_core_dev_pr_attr_store,
1788};
1789
1790TB_CIT_SETUP(dev_pr, &target_core_dev_pr_ops, NULL, target_core_dev_pr_attrs);
1791 1689
1792/* End functions for struct config_item_type tb_dev_pr_cit */ 1690/* End functions for struct config_item_type tb_dev_pr_cit */
1793 1691
1794/* Start functions for struct config_item_type tb_dev_cit */ 1692/* Start functions for struct config_item_type tb_dev_cit */
1795 1693
1796static ssize_t target_core_show_dev_info(void *p, char *page) 1694static inline struct se_device *to_device(struct config_item *item)
1695{
1696 return container_of(to_config_group(item), struct se_device, dev_group);
1697}
1698
1699static ssize_t target_dev_info_show(struct config_item *item, char *page)
1797{ 1700{
1798 struct se_device *dev = p; 1701 struct se_device *dev = to_device(item);
1799 int bl = 0; 1702 int bl = 0;
1800 ssize_t read_bytes = 0; 1703 ssize_t read_bytes = 0;
1801 1704
@@ -1806,35 +1709,17 @@ static ssize_t target_core_show_dev_info(void *p, char *page)
1806 return read_bytes; 1709 return read_bytes;
1807} 1710}
1808 1711
1809static struct target_core_configfs_attribute target_core_attr_dev_info = { 1712static ssize_t target_dev_control_store(struct config_item *item,
1810 .attr = { .ca_owner = THIS_MODULE, 1713 const char *page, size_t count)
1811 .ca_name = "info",
1812 .ca_mode = S_IRUGO },
1813 .show = target_core_show_dev_info,
1814 .store = NULL,
1815};
1816
1817static ssize_t target_core_store_dev_control(
1818 void *p,
1819 const char *page,
1820 size_t count)
1821{ 1714{
1822 struct se_device *dev = p; 1715 struct se_device *dev = to_device(item);
1823 1716
1824 return dev->transport->set_configfs_dev_params(dev, page, count); 1717 return dev->transport->set_configfs_dev_params(dev, page, count);
1825} 1718}
1826 1719
1827static struct target_core_configfs_attribute target_core_attr_dev_control = { 1720static ssize_t target_dev_alias_show(struct config_item *item, char *page)
1828 .attr = { .ca_owner = THIS_MODULE,
1829 .ca_name = "control",
1830 .ca_mode = S_IWUSR },
1831 .show = NULL,
1832 .store = target_core_store_dev_control,
1833};
1834
1835static ssize_t target_core_show_dev_alias(void *p, char *page)
1836{ 1721{
1837 struct se_device *dev = p; 1722 struct se_device *dev = to_device(item);
1838 1723
1839 if (!(dev->dev_flags & DF_USING_ALIAS)) 1724 if (!(dev->dev_flags & DF_USING_ALIAS))
1840 return 0; 1725 return 0;
@@ -1842,12 +1727,10 @@ static ssize_t target_core_show_dev_alias(void *p, char *page)
1842 return snprintf(page, PAGE_SIZE, "%s\n", dev->dev_alias); 1727 return snprintf(page, PAGE_SIZE, "%s\n", dev->dev_alias);
1843} 1728}
1844 1729
1845static ssize_t target_core_store_dev_alias( 1730static ssize_t target_dev_alias_store(struct config_item *item,
1846 void *p, 1731 const char *page, size_t count)
1847 const char *page,
1848 size_t count)
1849{ 1732{
1850 struct se_device *dev = p; 1733 struct se_device *dev = to_device(item);
1851 struct se_hba *hba = dev->se_hba; 1734 struct se_hba *hba = dev->se_hba;
1852 ssize_t read_bytes; 1735 ssize_t read_bytes;
1853 1736
@@ -1874,17 +1757,9 @@ static ssize_t target_core_store_dev_alias(
1874 return read_bytes; 1757 return read_bytes;
1875} 1758}
1876 1759
1877static struct target_core_configfs_attribute target_core_attr_dev_alias = { 1760static ssize_t target_dev_udev_path_show(struct config_item *item, char *page)
1878 .attr = { .ca_owner = THIS_MODULE,
1879 .ca_name = "alias",
1880 .ca_mode = S_IRUGO | S_IWUSR },
1881 .show = target_core_show_dev_alias,
1882 .store = target_core_store_dev_alias,
1883};
1884
1885static ssize_t target_core_show_dev_udev_path(void *p, char *page)
1886{ 1761{
1887 struct se_device *dev = p; 1762 struct se_device *dev = to_device(item);
1888 1763
1889 if (!(dev->dev_flags & DF_USING_UDEV_PATH)) 1764 if (!(dev->dev_flags & DF_USING_UDEV_PATH))
1890 return 0; 1765 return 0;
@@ -1892,12 +1767,10 @@ static ssize_t target_core_show_dev_udev_path(void *p, char *page)
1892 return snprintf(page, PAGE_SIZE, "%s\n", dev->udev_path); 1767 return snprintf(page, PAGE_SIZE, "%s\n", dev->udev_path);
1893} 1768}
1894 1769
1895static ssize_t target_core_store_dev_udev_path( 1770static ssize_t target_dev_udev_path_store(struct config_item *item,
1896 void *p, 1771 const char *page, size_t count)
1897 const char *page,
1898 size_t count)
1899{ 1772{
1900 struct se_device *dev = p; 1773 struct se_device *dev = to_device(item);
1901 struct se_hba *hba = dev->se_hba; 1774 struct se_hba *hba = dev->se_hba;
1902 ssize_t read_bytes; 1775 ssize_t read_bytes;
1903 1776
@@ -1925,27 +1798,17 @@ static ssize_t target_core_store_dev_udev_path(
1925 return read_bytes; 1798 return read_bytes;
1926} 1799}
1927 1800
1928static struct target_core_configfs_attribute target_core_attr_dev_udev_path = { 1801static ssize_t target_dev_enable_show(struct config_item *item, char *page)
1929 .attr = { .ca_owner = THIS_MODULE,
1930 .ca_name = "udev_path",
1931 .ca_mode = S_IRUGO | S_IWUSR },
1932 .show = target_core_show_dev_udev_path,
1933 .store = target_core_store_dev_udev_path,
1934};
1935
1936static ssize_t target_core_show_dev_enable(void *p, char *page)
1937{ 1802{
1938 struct se_device *dev = p; 1803 struct se_device *dev = to_device(item);
1939 1804
1940 return snprintf(page, PAGE_SIZE, "%d\n", !!(dev->dev_flags & DF_CONFIGURED)); 1805 return snprintf(page, PAGE_SIZE, "%d\n", !!(dev->dev_flags & DF_CONFIGURED));
1941} 1806}
1942 1807
1943static ssize_t target_core_store_dev_enable( 1808static ssize_t target_dev_enable_store(struct config_item *item,
1944 void *p, 1809 const char *page, size_t count)
1945 const char *page,
1946 size_t count)
1947{ 1810{
1948 struct se_device *dev = p; 1811 struct se_device *dev = to_device(item);
1949 char *ptr; 1812 char *ptr;
1950 int ret; 1813 int ret;
1951 1814
@@ -1962,17 +1825,9 @@ static ssize_t target_core_store_dev_enable(
1962 return count; 1825 return count;
1963} 1826}
1964 1827
1965static struct target_core_configfs_attribute target_core_attr_dev_enable = { 1828static ssize_t target_dev_alua_lu_gp_show(struct config_item *item, char *page)
1966 .attr = { .ca_owner = THIS_MODULE,
1967 .ca_name = "enable",
1968 .ca_mode = S_IRUGO | S_IWUSR },
1969 .show = target_core_show_dev_enable,
1970 .store = target_core_store_dev_enable,
1971};
1972
1973static ssize_t target_core_show_alua_lu_gp(void *p, char *page)
1974{ 1829{
1975 struct se_device *dev = p; 1830 struct se_device *dev = to_device(item);
1976 struct config_item *lu_ci; 1831 struct config_item *lu_ci;
1977 struct t10_alua_lu_gp *lu_gp; 1832 struct t10_alua_lu_gp *lu_gp;
1978 struct t10_alua_lu_gp_member *lu_gp_mem; 1833 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 return len; 1849 return len;
1995} 1850}
1996 1851
1997static ssize_t target_core_store_alua_lu_gp( 1852static ssize_t target_dev_alua_lu_gp_store(struct config_item *item,
1998 void *p, 1853 const char *page, size_t count)
1999 const char *page,
2000 size_t count)
2001{ 1854{
2002 struct se_device *dev = p; 1855 struct se_device *dev = to_device(item);
2003 struct se_hba *hba = dev->se_hba; 1856 struct se_hba *hba = dev->se_hba;
2004 struct t10_alua_lu_gp *lu_gp = NULL, *lu_gp_new = NULL; 1857 struct t10_alua_lu_gp *lu_gp = NULL, *lu_gp_new = NULL;
2005 struct t10_alua_lu_gp_member *lu_gp_mem; 1858 struct t10_alua_lu_gp_member *lu_gp_mem;
@@ -2076,17 +1929,9 @@ static ssize_t target_core_store_alua_lu_gp(
2076 return count; 1929 return count;
2077} 1930}
2078 1931
2079static struct target_core_configfs_attribute target_core_attr_dev_alua_lu_gp = { 1932static ssize_t target_dev_lba_map_show(struct config_item *item, char *page)
2080 .attr = { .ca_owner = THIS_MODULE,
2081 .ca_name = "alua_lu_gp",
2082 .ca_mode = S_IRUGO | S_IWUSR },
2083 .show = target_core_show_alua_lu_gp,
2084 .store = target_core_store_alua_lu_gp,
2085};
2086
2087static ssize_t target_core_show_dev_lba_map(void *p, char *page)
2088{ 1933{
2089 struct se_device *dev = p; 1934 struct se_device *dev = to_device(item);
2090 struct t10_alua_lba_map *map; 1935 struct t10_alua_lba_map *map;
2091 struct t10_alua_lba_map_member *mem; 1936 struct t10_alua_lba_map_member *mem;
2092 char *b = page; 1937 char *b = page;
@@ -2129,12 +1974,10 @@ static ssize_t target_core_show_dev_lba_map(void *p, char *page)
2129 return bl; 1974 return bl;
2130} 1975}
2131 1976
2132static ssize_t target_core_store_dev_lba_map( 1977static ssize_t target_dev_lba_map_store(struct config_item *item,
2133 void *p, 1978 const char *page, size_t count)
2134 const char *page,
2135 size_t count)
2136{ 1979{
2137 struct se_device *dev = p; 1980 struct se_device *dev = to_device(item);
2138 struct t10_alua_lba_map *lba_map = NULL; 1981 struct t10_alua_lba_map *lba_map = NULL;
2139 struct list_head lba_list; 1982 struct list_head lba_list;
2140 char *map_entries, *ptr; 1983 char *map_entries, *ptr;
@@ -2246,22 +2089,22 @@ out:
2246 return count; 2089 return count;
2247} 2090}
2248 2091
2249static struct target_core_configfs_attribute target_core_attr_dev_lba_map = { 2092CONFIGFS_ATTR_RO(target_dev_, info);
2250 .attr = { .ca_owner = THIS_MODULE, 2093CONFIGFS_ATTR_WO(target_dev_, control);
2251 .ca_name = "lba_map", 2094CONFIGFS_ATTR(target_dev_, alias);
2252 .ca_mode = S_IRUGO | S_IWUSR }, 2095CONFIGFS_ATTR(target_dev_, udev_path);
2253 .show = target_core_show_dev_lba_map, 2096CONFIGFS_ATTR(target_dev_, enable);
2254 .store = target_core_store_dev_lba_map, 2097CONFIGFS_ATTR(target_dev_, alua_lu_gp);
2255}; 2098CONFIGFS_ATTR(target_dev_, lba_map);
2256 2099
2257static struct configfs_attribute *target_core_dev_attrs[] = { 2100static struct configfs_attribute *target_core_dev_attrs[] = {
2258 &target_core_attr_dev_info.attr, 2101 &target_dev_attr_info,
2259 &target_core_attr_dev_control.attr, 2102 &target_dev_attr_control,
2260 &target_core_attr_dev_alias.attr, 2103 &target_dev_attr_alias,
2261 &target_core_attr_dev_udev_path.attr, 2104 &target_dev_attr_udev_path,
2262 &target_core_attr_dev_enable.attr, 2105 &target_dev_attr_enable,
2263 &target_core_attr_dev_alua_lu_gp.attr, 2106 &target_dev_attr_alua_lu_gp,
2264 &target_core_attr_dev_lba_map.attr, 2107 &target_dev_attr_lba_map,
2265 NULL, 2108 NULL,
2266}; 2109};
2267 2110
@@ -2275,42 +2118,8 @@ static void target_core_dev_release(struct config_item *item)
2275 target_free_device(dev); 2118 target_free_device(dev);
2276} 2119}
2277 2120
2278static ssize_t target_core_dev_show(struct config_item *item,
2279 struct configfs_attribute *attr,
2280 char *page)
2281{
2282 struct config_group *dev_cg = to_config_group(item);
2283 struct se_device *dev =
2284 container_of(dev_cg, struct se_device, dev_group);
2285 struct target_core_configfs_attribute *tc_attr = container_of(
2286 attr, struct target_core_configfs_attribute, attr);
2287
2288 if (!tc_attr->show)
2289 return -EINVAL;
2290
2291 return tc_attr->show(dev, page);
2292}
2293
2294static ssize_t target_core_dev_store(struct config_item *item,
2295 struct configfs_attribute *attr,
2296 const char *page, size_t count)
2297{
2298 struct config_group *dev_cg = to_config_group(item);
2299 struct se_device *dev =
2300 container_of(dev_cg, struct se_device, dev_group);
2301 struct target_core_configfs_attribute *tc_attr = container_of(
2302 attr, struct target_core_configfs_attribute, attr);
2303
2304 if (!tc_attr->store)
2305 return -EINVAL;
2306
2307 return tc_attr->store(dev, page, count);
2308}
2309
2310static struct configfs_item_operations target_core_dev_item_ops = { 2121static struct configfs_item_operations target_core_dev_item_ops = {
2311 .release = target_core_dev_release, 2122 .release = target_core_dev_release,
2312 .show_attribute = target_core_dev_show,
2313 .store_attribute = target_core_dev_store,
2314}; 2123};
2315 2124
2316TB_CIT_SETUP(dev, &target_core_dev_item_ops, NULL, target_core_dev_attrs); 2125TB_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 2128
2320/* Start functions for struct config_item_type target_core_alua_lu_gp_cit */ 2129/* Start functions for struct config_item_type target_core_alua_lu_gp_cit */
2321 2130
2322CONFIGFS_EATTR_STRUCT(target_core_alua_lu_gp, t10_alua_lu_gp); 2131static inline struct t10_alua_lu_gp *to_lu_gp(struct config_item *item)
2323#define SE_DEV_ALUA_LU_ATTR(_name, _mode) \ 2132{
2324static struct target_core_alua_lu_gp_attribute \ 2133 return container_of(to_config_group(item), struct t10_alua_lu_gp,
2325 target_core_alua_lu_gp_##_name = \ 2134 lu_gp_group);
2326 __CONFIGFS_EATTR(_name, _mode, \ 2135}
2327 target_core_alua_lu_gp_show_attr_##_name, \
2328 target_core_alua_lu_gp_store_attr_##_name);
2329
2330#define SE_DEV_ALUA_LU_ATTR_RO(_name) \
2331static struct target_core_alua_lu_gp_attribute \
2332 target_core_alua_lu_gp_##_name = \
2333 __CONFIGFS_EATTR_RO(_name, \
2334 target_core_alua_lu_gp_show_attr_##_name);
2335 2136
2336/* 2137static ssize_t target_lu_gp_lu_gp_id_show(struct config_item *item, char *page)
2337 * lu_gp_id
2338 */
2339static ssize_t target_core_alua_lu_gp_show_attr_lu_gp_id(
2340 struct t10_alua_lu_gp *lu_gp,
2341 char *page)
2342{ 2138{
2139 struct t10_alua_lu_gp *lu_gp = to_lu_gp(item);
2140
2343 if (!lu_gp->lu_gp_valid_id) 2141 if (!lu_gp->lu_gp_valid_id)
2344 return 0; 2142 return 0;
2345
2346 return sprintf(page, "%hu\n", lu_gp->lu_gp_id); 2143 return sprintf(page, "%hu\n", lu_gp->lu_gp_id);
2347} 2144}
2348 2145
2349static ssize_t target_core_alua_lu_gp_store_attr_lu_gp_id( 2146static ssize_t target_lu_gp_lu_gp_id_store(struct config_item *item,
2350 struct t10_alua_lu_gp *lu_gp, 2147 const char *page, size_t count)
2351 const char *page,
2352 size_t count)
2353{ 2148{
2149 struct t10_alua_lu_gp *lu_gp = to_lu_gp(item);
2354 struct config_group *alua_lu_gp_cg = &lu_gp->lu_gp_group; 2150 struct config_group *alua_lu_gp_cg = &lu_gp->lu_gp_group;
2355 unsigned long lu_gp_id; 2151 unsigned long lu_gp_id;
2356 int ret; 2152 int ret;
@@ -2379,15 +2175,9 @@ static ssize_t target_core_alua_lu_gp_store_attr_lu_gp_id(
2379 return count; 2175 return count;
2380} 2176}
2381 2177
2382SE_DEV_ALUA_LU_ATTR(lu_gp_id, S_IRUGO | S_IWUSR); 2178static ssize_t target_lu_gp_members_show(struct config_item *item, char *page)
2383
2384/*
2385 * members
2386 */
2387static ssize_t target_core_alua_lu_gp_show_attr_members(
2388 struct t10_alua_lu_gp *lu_gp,
2389 char *page)
2390{ 2179{
2180 struct t10_alua_lu_gp *lu_gp = to_lu_gp(item);
2391 struct se_device *dev; 2181 struct se_device *dev;
2392 struct se_hba *hba; 2182 struct se_hba *hba;
2393 struct t10_alua_lu_gp_member *lu_gp_mem; 2183 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 return len; 2209 return len;
2420} 2210}
2421 2211
2422SE_DEV_ALUA_LU_ATTR_RO(members); 2212CONFIGFS_ATTR(target_lu_gp_, lu_gp_id);
2423 2213CONFIGFS_ATTR_RO(target_lu_gp_, members);
2424CONFIGFS_EATTR_OPS(target_core_alua_lu_gp, t10_alua_lu_gp, lu_gp_group);
2425 2214
2426static struct configfs_attribute *target_core_alua_lu_gp_attrs[] = { 2215static struct configfs_attribute *target_core_alua_lu_gp_attrs[] = {
2427 &target_core_alua_lu_gp_lu_gp_id.attr, 2216 &target_lu_gp_attr_lu_gp_id,
2428 &target_core_alua_lu_gp_members.attr, 2217 &target_lu_gp_attr_members,
2429 NULL, 2218 NULL,
2430}; 2219};
2431 2220
@@ -2439,8 +2228,6 @@ static void target_core_alua_lu_gp_release(struct config_item *item)
2439 2228
2440static struct configfs_item_operations target_core_alua_lu_gp_ops = { 2229static struct configfs_item_operations target_core_alua_lu_gp_ops = {
2441 .release = target_core_alua_lu_gp_release, 2230 .release = target_core_alua_lu_gp_release,
2442 .show_attribute = target_core_alua_lu_gp_attr_show,
2443 .store_attribute = target_core_alua_lu_gp_attr_store,
2444}; 2231};
2445 2232
2446static struct config_item_type target_core_alua_lu_gp_cit = { 2233static 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 2298
2512/* Start functions for struct config_item_type target_core_alua_tg_pt_gp_cit */ 2299/* Start functions for struct config_item_type target_core_alua_tg_pt_gp_cit */
2513 2300
2514CONFIGFS_EATTR_STRUCT(target_core_alua_tg_pt_gp, t10_alua_tg_pt_gp); 2301static inline struct t10_alua_tg_pt_gp *to_tg_pt_gp(struct config_item *item)
2515#define SE_DEV_ALUA_TG_PT_ATTR(_name, _mode) \ 2302{
2516static struct target_core_alua_tg_pt_gp_attribute \ 2303 return container_of(to_config_group(item), struct t10_alua_tg_pt_gp,
2517 target_core_alua_tg_pt_gp_##_name = \ 2304 tg_pt_gp_group);
2518 __CONFIGFS_EATTR(_name, _mode, \ 2305}
2519 target_core_alua_tg_pt_gp_show_attr_##_name, \
2520 target_core_alua_tg_pt_gp_store_attr_##_name);
2521
2522#define SE_DEV_ALUA_TG_PT_ATTR_RO(_name) \
2523static struct target_core_alua_tg_pt_gp_attribute \
2524 target_core_alua_tg_pt_gp_##_name = \
2525 __CONFIGFS_EATTR_RO(_name, \
2526 target_core_alua_tg_pt_gp_show_attr_##_name);
2527 2306
2528/* 2307static ssize_t target_tg_pt_gp_alua_access_state_show(struct config_item *item,
2529 * alua_access_state 2308 char *page)
2530 */
2531static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_access_state(
2532 struct t10_alua_tg_pt_gp *tg_pt_gp,
2533 char *page)
2534{ 2309{
2535 return sprintf(page, "%d\n", 2310 return sprintf(page, "%d\n",
2536 atomic_read(&tg_pt_gp->tg_pt_gp_alua_access_state)); 2311 atomic_read(&to_tg_pt_gp(item)->tg_pt_gp_alua_access_state));
2537} 2312}
2538 2313
2539static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_state( 2314static ssize_t target_tg_pt_gp_alua_access_state_store(struct config_item *item,
2540 struct t10_alua_tg_pt_gp *tg_pt_gp, 2315 const char *page, size_t count)
2541 const char *page,
2542 size_t count)
2543{ 2316{
2317 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2544 struct se_device *dev = tg_pt_gp->tg_pt_gp_dev; 2318 struct se_device *dev = tg_pt_gp->tg_pt_gp_dev;
2545 unsigned long tmp; 2319 unsigned long tmp;
2546 int new_state, ret; 2320 int new_state, ret;
@@ -2582,24 +2356,18 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_state(
2582 return (!ret) ? count : -EINVAL; 2356 return (!ret) ? count : -EINVAL;
2583} 2357}
2584 2358
2585SE_DEV_ALUA_TG_PT_ATTR(alua_access_state, S_IRUGO | S_IWUSR); 2359static ssize_t target_tg_pt_gp_alua_access_status_show(struct config_item *item,
2586 2360 char *page)
2587/*
2588 * alua_access_status
2589 */
2590static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_access_status(
2591 struct t10_alua_tg_pt_gp *tg_pt_gp,
2592 char *page)
2593{ 2361{
2362 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2594 return sprintf(page, "%s\n", 2363 return sprintf(page, "%s\n",
2595 core_alua_dump_status(tg_pt_gp->tg_pt_gp_alua_access_status)); 2364 core_alua_dump_status(tg_pt_gp->tg_pt_gp_alua_access_status));
2596} 2365}
2597 2366
2598static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_status( 2367static ssize_t target_tg_pt_gp_alua_access_status_store(
2599 struct t10_alua_tg_pt_gp *tg_pt_gp, 2368 struct config_item *item, const char *page, size_t count)
2600 const char *page,
2601 size_t count)
2602{ 2369{
2370 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2603 unsigned long tmp; 2371 unsigned long tmp;
2604 int new_status, ret; 2372 int new_status, ret;
2605 2373
@@ -2630,43 +2398,31 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_status(
2630 return count; 2398 return count;
2631} 2399}
2632 2400
2633SE_DEV_ALUA_TG_PT_ATTR(alua_access_status, S_IRUGO | S_IWUSR); 2401static ssize_t target_tg_pt_gp_alua_access_type_show(struct config_item *item,
2634 2402 char *page)
2635/*
2636 * alua_access_type
2637 */
2638static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_access_type(
2639 struct t10_alua_tg_pt_gp *tg_pt_gp,
2640 char *page)
2641{ 2403{
2642 return core_alua_show_access_type(tg_pt_gp, page); 2404 return core_alua_show_access_type(to_tg_pt_gp(item), page);
2643} 2405}
2644 2406
2645static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_type( 2407static ssize_t target_tg_pt_gp_alua_access_type_store(struct config_item *item,
2646 struct t10_alua_tg_pt_gp *tg_pt_gp, 2408 const char *page, size_t count)
2647 const char *page,
2648 size_t count)
2649{ 2409{
2650 return core_alua_store_access_type(tg_pt_gp, page, count); 2410 return core_alua_store_access_type(to_tg_pt_gp(item), page, count);
2651} 2411}
2652 2412
2653SE_DEV_ALUA_TG_PT_ATTR(alua_access_type, S_IRUGO | S_IWUSR); 2413#define ALUA_SUPPORTED_STATE_ATTR(_name, _bit) \
2654 2414static ssize_t target_tg_pt_gp_alua_support_##_name##_show( \
2655/* 2415 struct config_item *item, char *p) \
2656 * alua_supported_states
2657 */
2658
2659#define SE_DEV_ALUA_SUPPORT_STATE_SHOW(_name, _var, _bit) \
2660static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_support_##_name( \
2661 struct t10_alua_tg_pt_gp *t, char *p) \
2662{ \ 2416{ \
2663 return sprintf(p, "%d\n", !!(t->_var & _bit)); \ 2417 struct t10_alua_tg_pt_gp *t = to_tg_pt_gp(item); \
2664} 2418 return sprintf(p, "%d\n", \
2665 2419 !!(t->tg_pt_gp_alua_supported_states & _bit)); \
2666#define SE_DEV_ALUA_SUPPORT_STATE_STORE(_name, _var, _bit) \ 2420} \
2667static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_support_##_name(\ 2421 \
2668 struct t10_alua_tg_pt_gp *t, const char *p, size_t c) \ 2422static ssize_t target_tg_pt_gp_alua_support_##_name##_store( \
2423 struct config_item *item, const char *p, size_t c) \
2669{ \ 2424{ \
2425 struct t10_alua_tg_pt_gp *t = to_tg_pt_gp(item); \
2670 unsigned long tmp; \ 2426 unsigned long tmp; \
2671 int ret; \ 2427 int ret; \
2672 \ 2428 \
@@ -2687,70 +2443,32 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_support_##_name(\
2687 return -EINVAL; \ 2443 return -EINVAL; \
2688 } \ 2444 } \
2689 if (tmp) \ 2445 if (tmp) \
2690 t->_var |= _bit; \ 2446 t->tg_pt_gp_alua_supported_states |= _bit; \
2691 else \ 2447 else \
2692 t->_var &= ~_bit; \ 2448 t->tg_pt_gp_alua_supported_states &= ~_bit; \
2693 \ 2449 \
2694 return c; \ 2450 return c; \
2695} 2451}
2696 2452
2697SE_DEV_ALUA_SUPPORT_STATE_SHOW(transitioning, 2453ALUA_SUPPORTED_STATE_ATTR(transitioning, ALUA_T_SUP);
2698 tg_pt_gp_alua_supported_states, ALUA_T_SUP); 2454ALUA_SUPPORTED_STATE_ATTR(offline, ALUA_O_SUP);
2699SE_DEV_ALUA_SUPPORT_STATE_STORE(transitioning, 2455ALUA_SUPPORTED_STATE_ATTR(lba_dependent, ALUA_LBD_SUP);
2700 tg_pt_gp_alua_supported_states, ALUA_T_SUP); 2456ALUA_SUPPORTED_STATE_ATTR(unavailable, ALUA_U_SUP);
2701SE_DEV_ALUA_TG_PT_ATTR(alua_support_transitioning, S_IRUGO | S_IWUSR); 2457ALUA_SUPPORTED_STATE_ATTR(standby, ALUA_S_SUP);
2702 2458ALUA_SUPPORTED_STATE_ATTR(active_optimized, ALUA_AO_SUP);
2703SE_DEV_ALUA_SUPPORT_STATE_SHOW(offline, 2459ALUA_SUPPORTED_STATE_ATTR(active_nonoptimized, ALUA_AN_SUP);
2704 tg_pt_gp_alua_supported_states, ALUA_O_SUP);
2705SE_DEV_ALUA_SUPPORT_STATE_STORE(offline,
2706 tg_pt_gp_alua_supported_states, ALUA_O_SUP);
2707SE_DEV_ALUA_TG_PT_ATTR(alua_support_offline, S_IRUGO | S_IWUSR);
2708
2709SE_DEV_ALUA_SUPPORT_STATE_SHOW(lba_dependent,
2710 tg_pt_gp_alua_supported_states, ALUA_LBD_SUP);
2711SE_DEV_ALUA_SUPPORT_STATE_STORE(lba_dependent,
2712 tg_pt_gp_alua_supported_states, ALUA_LBD_SUP);
2713SE_DEV_ALUA_TG_PT_ATTR(alua_support_lba_dependent, S_IRUGO);
2714
2715SE_DEV_ALUA_SUPPORT_STATE_SHOW(unavailable,
2716 tg_pt_gp_alua_supported_states, ALUA_U_SUP);
2717SE_DEV_ALUA_SUPPORT_STATE_STORE(unavailable,
2718 tg_pt_gp_alua_supported_states, ALUA_U_SUP);
2719SE_DEV_ALUA_TG_PT_ATTR(alua_support_unavailable, S_IRUGO | S_IWUSR);
2720
2721SE_DEV_ALUA_SUPPORT_STATE_SHOW(standby,
2722 tg_pt_gp_alua_supported_states, ALUA_S_SUP);
2723SE_DEV_ALUA_SUPPORT_STATE_STORE(standby,
2724 tg_pt_gp_alua_supported_states, ALUA_S_SUP);
2725SE_DEV_ALUA_TG_PT_ATTR(alua_support_standby, S_IRUGO | S_IWUSR);
2726
2727SE_DEV_ALUA_SUPPORT_STATE_SHOW(active_optimized,
2728 tg_pt_gp_alua_supported_states, ALUA_AO_SUP);
2729SE_DEV_ALUA_SUPPORT_STATE_STORE(active_optimized,
2730 tg_pt_gp_alua_supported_states, ALUA_AO_SUP);
2731SE_DEV_ALUA_TG_PT_ATTR(alua_support_active_optimized, S_IRUGO | S_IWUSR);
2732
2733SE_DEV_ALUA_SUPPORT_STATE_SHOW(active_nonoptimized,
2734 tg_pt_gp_alua_supported_states, ALUA_AN_SUP);
2735SE_DEV_ALUA_SUPPORT_STATE_STORE(active_nonoptimized,
2736 tg_pt_gp_alua_supported_states, ALUA_AN_SUP);
2737SE_DEV_ALUA_TG_PT_ATTR(alua_support_active_nonoptimized, S_IRUGO | S_IWUSR);
2738 2460
2739/* 2461static ssize_t target_tg_pt_gp_alua_write_metadata_show(
2740 * alua_write_metadata 2462 struct config_item *item, char *page)
2741 */
2742static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_write_metadata(
2743 struct t10_alua_tg_pt_gp *tg_pt_gp,
2744 char *page)
2745{ 2463{
2746 return sprintf(page, "%d\n", tg_pt_gp->tg_pt_gp_write_metadata); 2464 return sprintf(page, "%d\n",
2465 to_tg_pt_gp(item)->tg_pt_gp_write_metadata);
2747} 2466}
2748 2467
2749static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_write_metadata( 2468static ssize_t target_tg_pt_gp_alua_write_metadata_store(
2750 struct t10_alua_tg_pt_gp *tg_pt_gp, 2469 struct config_item *item, const char *page, size_t count)
2751 const char *page,
2752 size_t count)
2753{ 2470{
2471 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2754 unsigned long tmp; 2472 unsigned long tmp;
2755 int ret; 2473 int ret;
2756 2474
@@ -2770,110 +2488,71 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_write_metadata(
2770 return count; 2488 return count;
2771} 2489}
2772 2490
2773SE_DEV_ALUA_TG_PT_ATTR(alua_write_metadata, S_IRUGO | S_IWUSR); 2491static ssize_t target_tg_pt_gp_nonop_delay_msecs_show(struct config_item *item,
2774 2492 char *page)
2775
2776
2777/*
2778 * nonop_delay_msecs
2779 */
2780static ssize_t target_core_alua_tg_pt_gp_show_attr_nonop_delay_msecs(
2781 struct t10_alua_tg_pt_gp *tg_pt_gp,
2782 char *page)
2783{ 2493{
2784 return core_alua_show_nonop_delay_msecs(tg_pt_gp, page); 2494 return core_alua_show_nonop_delay_msecs(to_tg_pt_gp(item), page);
2785
2786} 2495}
2787 2496
2788static ssize_t target_core_alua_tg_pt_gp_store_attr_nonop_delay_msecs( 2497static ssize_t target_tg_pt_gp_nonop_delay_msecs_store(struct config_item *item,
2789 struct t10_alua_tg_pt_gp *tg_pt_gp, 2498 const char *page, size_t count)
2790 const char *page,
2791 size_t count)
2792{ 2499{
2793 return core_alua_store_nonop_delay_msecs(tg_pt_gp, page, count); 2500 return core_alua_store_nonop_delay_msecs(to_tg_pt_gp(item), page,
2501 count);
2794} 2502}
2795 2503
2796SE_DEV_ALUA_TG_PT_ATTR(nonop_delay_msecs, S_IRUGO | S_IWUSR); 2504static ssize_t target_tg_pt_gp_trans_delay_msecs_show(struct config_item *item,
2797 2505 char *page)
2798/*
2799 * trans_delay_msecs
2800 */
2801static ssize_t target_core_alua_tg_pt_gp_show_attr_trans_delay_msecs(
2802 struct t10_alua_tg_pt_gp *tg_pt_gp,
2803 char *page)
2804{ 2506{
2805 return core_alua_show_trans_delay_msecs(tg_pt_gp, page); 2507 return core_alua_show_trans_delay_msecs(to_tg_pt_gp(item), page);
2806} 2508}
2807 2509
2808static ssize_t target_core_alua_tg_pt_gp_store_attr_trans_delay_msecs( 2510static ssize_t target_tg_pt_gp_trans_delay_msecs_store(struct config_item *item,
2809 struct t10_alua_tg_pt_gp *tg_pt_gp, 2511 const char *page, size_t count)
2810 const char *page,
2811 size_t count)
2812{ 2512{
2813 return core_alua_store_trans_delay_msecs(tg_pt_gp, page, count); 2513 return core_alua_store_trans_delay_msecs(to_tg_pt_gp(item), page,
2514 count);
2814} 2515}
2815 2516
2816SE_DEV_ALUA_TG_PT_ATTR(trans_delay_msecs, S_IRUGO | S_IWUSR); 2517static ssize_t target_tg_pt_gp_implicit_trans_secs_show(
2817 2518 struct config_item *item, char *page)
2818/*
2819 * implicit_trans_secs
2820 */
2821static ssize_t target_core_alua_tg_pt_gp_show_attr_implicit_trans_secs(
2822 struct t10_alua_tg_pt_gp *tg_pt_gp,
2823 char *page)
2824{ 2519{
2825 return core_alua_show_implicit_trans_secs(tg_pt_gp, page); 2520 return core_alua_show_implicit_trans_secs(to_tg_pt_gp(item), page);
2826} 2521}
2827 2522
2828static ssize_t target_core_alua_tg_pt_gp_store_attr_implicit_trans_secs( 2523static ssize_t target_tg_pt_gp_implicit_trans_secs_store(
2829 struct t10_alua_tg_pt_gp *tg_pt_gp, 2524 struct config_item *item, const char *page, size_t count)
2830 const char *page,
2831 size_t count)
2832{ 2525{
2833 return core_alua_store_implicit_trans_secs(tg_pt_gp, page, count); 2526 return core_alua_store_implicit_trans_secs(to_tg_pt_gp(item), page,
2527 count);
2834} 2528}
2835 2529
2836SE_DEV_ALUA_TG_PT_ATTR(implicit_trans_secs, S_IRUGO | S_IWUSR); 2530static ssize_t target_tg_pt_gp_preferred_show(struct config_item *item,
2837 2531 char *page)
2838/*
2839 * preferred
2840 */
2841
2842static ssize_t target_core_alua_tg_pt_gp_show_attr_preferred(
2843 struct t10_alua_tg_pt_gp *tg_pt_gp,
2844 char *page)
2845{ 2532{
2846 return core_alua_show_preferred_bit(tg_pt_gp, page); 2533 return core_alua_show_preferred_bit(to_tg_pt_gp(item), page);
2847} 2534}
2848 2535
2849static ssize_t target_core_alua_tg_pt_gp_store_attr_preferred( 2536static ssize_t target_tg_pt_gp_preferred_store(struct config_item *item,
2850 struct t10_alua_tg_pt_gp *tg_pt_gp, 2537 const char *page, size_t count)
2851 const char *page,
2852 size_t count)
2853{ 2538{
2854 return core_alua_store_preferred_bit(tg_pt_gp, page, count); 2539 return core_alua_store_preferred_bit(to_tg_pt_gp(item), page, count);
2855} 2540}
2856 2541
2857SE_DEV_ALUA_TG_PT_ATTR(preferred, S_IRUGO | S_IWUSR); 2542static ssize_t target_tg_pt_gp_tg_pt_gp_id_show(struct config_item *item,
2858 2543 char *page)
2859/*
2860 * tg_pt_gp_id
2861 */
2862static ssize_t target_core_alua_tg_pt_gp_show_attr_tg_pt_gp_id(
2863 struct t10_alua_tg_pt_gp *tg_pt_gp,
2864 char *page)
2865{ 2544{
2545 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2546
2866 if (!tg_pt_gp->tg_pt_gp_valid_id) 2547 if (!tg_pt_gp->tg_pt_gp_valid_id)
2867 return 0; 2548 return 0;
2868
2869 return sprintf(page, "%hu\n", tg_pt_gp->tg_pt_gp_id); 2549 return sprintf(page, "%hu\n", tg_pt_gp->tg_pt_gp_id);
2870} 2550}
2871 2551
2872static ssize_t target_core_alua_tg_pt_gp_store_attr_tg_pt_gp_id( 2552static ssize_t target_tg_pt_gp_tg_pt_gp_id_store(struct config_item *item,
2873 struct t10_alua_tg_pt_gp *tg_pt_gp, 2553 const char *page, size_t count)
2874 const char *page,
2875 size_t count)
2876{ 2554{
2555 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2877 struct config_group *alua_tg_pt_gp_cg = &tg_pt_gp->tg_pt_gp_group; 2556 struct config_group *alua_tg_pt_gp_cg = &tg_pt_gp->tg_pt_gp_group;
2878 unsigned long tg_pt_gp_id; 2557 unsigned long tg_pt_gp_id;
2879 int ret; 2558 int ret;
@@ -2902,15 +2581,10 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_tg_pt_gp_id(
2902 return count; 2581 return count;
2903} 2582}
2904 2583
2905SE_DEV_ALUA_TG_PT_ATTR(tg_pt_gp_id, S_IRUGO | S_IWUSR); 2584static ssize_t target_tg_pt_gp_members_show(struct config_item *item,
2906 2585 char *page)
2907/*
2908 * members
2909 */
2910static ssize_t target_core_alua_tg_pt_gp_show_attr_members(
2911 struct t10_alua_tg_pt_gp *tg_pt_gp,
2912 char *page)
2913{ 2586{
2587 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2914 struct se_lun *lun; 2588 struct se_lun *lun;
2915 ssize_t len = 0, cur_len; 2589 ssize_t len = 0, cur_len;
2916 unsigned char buf[TG_PT_GROUP_NAME_BUF]; 2590 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 return len; 2616 return len;
2943} 2617}
2944 2618
2945SE_DEV_ALUA_TG_PT_ATTR_RO(members); 2619CONFIGFS_ATTR(target_tg_pt_gp_, alua_access_state);
2946 2620CONFIGFS_ATTR(target_tg_pt_gp_, alua_access_status);
2947CONFIGFS_EATTR_OPS(target_core_alua_tg_pt_gp, t10_alua_tg_pt_gp, 2621CONFIGFS_ATTR(target_tg_pt_gp_, alua_access_type);
2948 tg_pt_gp_group); 2622CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_transitioning);
2623CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_offline);
2624CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_lba_dependent);
2625CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_unavailable);
2626CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_standby);
2627CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_active_optimized);
2628CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_active_nonoptimized);
2629CONFIGFS_ATTR(target_tg_pt_gp_, alua_write_metadata);
2630CONFIGFS_ATTR(target_tg_pt_gp_, nonop_delay_msecs);
2631CONFIGFS_ATTR(target_tg_pt_gp_, trans_delay_msecs);
2632CONFIGFS_ATTR(target_tg_pt_gp_, implicit_trans_secs);
2633CONFIGFS_ATTR(target_tg_pt_gp_, preferred);
2634CONFIGFS_ATTR(target_tg_pt_gp_, tg_pt_gp_id);
2635CONFIGFS_ATTR_RO(target_tg_pt_gp_, members);
2949 2636
2950static struct configfs_attribute *target_core_alua_tg_pt_gp_attrs[] = { 2637static struct configfs_attribute *target_core_alua_tg_pt_gp_attrs[] = {
2951 &target_core_alua_tg_pt_gp_alua_access_state.attr, 2638 &target_tg_pt_gp_attr_alua_access_state,
2952 &target_core_alua_tg_pt_gp_alua_access_status.attr, 2639 &target_tg_pt_gp_attr_alua_access_status,
2953 &target_core_alua_tg_pt_gp_alua_access_type.attr, 2640 &target_tg_pt_gp_attr_alua_access_type,
2954 &target_core_alua_tg_pt_gp_alua_support_transitioning.attr, 2641 &target_tg_pt_gp_attr_alua_support_transitioning,
2955 &target_core_alua_tg_pt_gp_alua_support_offline.attr, 2642 &target_tg_pt_gp_attr_alua_support_offline,
2956 &target_core_alua_tg_pt_gp_alua_support_lba_dependent.attr, 2643 &target_tg_pt_gp_attr_alua_support_lba_dependent,
2957 &target_core_alua_tg_pt_gp_alua_support_unavailable.attr, 2644 &target_tg_pt_gp_attr_alua_support_unavailable,
2958 &target_core_alua_tg_pt_gp_alua_support_standby.attr, 2645 &target_tg_pt_gp_attr_alua_support_standby,
2959 &target_core_alua_tg_pt_gp_alua_support_active_nonoptimized.attr, 2646 &target_tg_pt_gp_attr_alua_support_active_nonoptimized,
2960 &target_core_alua_tg_pt_gp_alua_support_active_optimized.attr, 2647 &target_tg_pt_gp_attr_alua_support_active_optimized,
2961 &target_core_alua_tg_pt_gp_alua_write_metadata.attr, 2648 &target_tg_pt_gp_attr_alua_write_metadata,
2962 &target_core_alua_tg_pt_gp_nonop_delay_msecs.attr, 2649 &target_tg_pt_gp_attr_nonop_delay_msecs,
2963 &target_core_alua_tg_pt_gp_trans_delay_msecs.attr, 2650 &target_tg_pt_gp_attr_trans_delay_msecs,
2964 &target_core_alua_tg_pt_gp_implicit_trans_secs.attr, 2651 &target_tg_pt_gp_attr_implicit_trans_secs,
2965 &target_core_alua_tg_pt_gp_preferred.attr, 2652 &target_tg_pt_gp_attr_preferred,
2966 &target_core_alua_tg_pt_gp_tg_pt_gp_id.attr, 2653 &target_tg_pt_gp_attr_tg_pt_gp_id,
2967 &target_core_alua_tg_pt_gp_members.attr, 2654 &target_tg_pt_gp_attr_members,
2968 NULL, 2655 NULL,
2969}; 2656};
2970 2657
@@ -2978,8 +2665,6 @@ static void target_core_alua_tg_pt_gp_release(struct config_item *item)
2978 2665
2979static struct configfs_item_operations target_core_alua_tg_pt_gp_ops = { 2666static struct configfs_item_operations target_core_alua_tg_pt_gp_ops = {
2980 .release = target_core_alua_tg_pt_gp_release, 2667 .release = target_core_alua_tg_pt_gp_release,
2981 .show_attribute = target_core_alua_tg_pt_gp_attr_show,
2982 .store_attribute = target_core_alua_tg_pt_gp_attr_store,
2983}; 2668};
2984 2669
2985static struct config_item_type target_core_alua_tg_pt_gp_cit = { 2670static 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 .drop_item = target_core_drop_subdev, 2922 .drop_item = target_core_drop_subdev,
3238}; 2923};
3239 2924
3240CONFIGFS_EATTR_STRUCT(target_core_hba, se_hba);
3241#define SE_HBA_ATTR(_name, _mode) \
3242static struct target_core_hba_attribute \
3243 target_core_hba_##_name = \
3244 __CONFIGFS_EATTR(_name, _mode, \
3245 target_core_hba_show_attr_##_name, \
3246 target_core_hba_store_attr_##_name);
3247 2925
3248#define SE_HBA_ATTR_RO(_name) \ 2926static inline struct se_hba *to_hba(struct config_item *item)
3249static struct target_core_hba_attribute \ 2927{
3250 target_core_hba_##_name = \ 2928 return container_of(to_config_group(item), struct se_hba, hba_group);
3251 __CONFIGFS_EATTR_RO(_name, \ 2929}
3252 target_core_hba_show_attr_##_name);
3253 2930
3254static ssize_t target_core_hba_show_attr_hba_info( 2931static ssize_t target_hba_info_show(struct config_item *item, char *page)
3255 struct se_hba *hba,
3256 char *page)
3257{ 2932{
2933 struct se_hba *hba = to_hba(item);
2934
3258 return sprintf(page, "HBA Index: %d plugin: %s version: %s\n", 2935 return sprintf(page, "HBA Index: %d plugin: %s version: %s\n",
3259 hba->hba_id, hba->backend->ops->name, 2936 hba->hba_id, hba->backend->ops->name,
3260 TARGET_CORE_VERSION); 2937 TARGET_CORE_VERSION);
3261} 2938}
3262 2939
3263SE_HBA_ATTR_RO(hba_info); 2940static ssize_t target_hba_mode_show(struct config_item *item, char *page)
3264
3265static ssize_t target_core_hba_show_attr_hba_mode(struct se_hba *hba,
3266 char *page)
3267{ 2941{
2942 struct se_hba *hba = to_hba(item);
3268 int hba_mode = 0; 2943 int hba_mode = 0;
3269 2944
3270 if (hba->hba_flags & HBA_FLAGS_PSCSI_MODE) 2945 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 return sprintf(page, "%d\n", hba_mode); 2948 return sprintf(page, "%d\n", hba_mode);
3274} 2949}
3275 2950
3276static ssize_t target_core_hba_store_attr_hba_mode(struct se_hba *hba, 2951static ssize_t target_hba_mode_store(struct config_item *item,
3277 const char *page, size_t count) 2952 const char *page, size_t count)
3278{ 2953{
2954 struct se_hba *hba = to_hba(item);
3279 unsigned long mode_flag; 2955 unsigned long mode_flag;
3280 int ret; 2956 int ret;
3281 2957
@@ -3304,9 +2980,8 @@ static ssize_t target_core_hba_store_attr_hba_mode(struct se_hba *hba,
3304 return count; 2980 return count;
3305} 2981}
3306 2982
3307SE_HBA_ATTR(hba_mode, S_IRUGO | S_IWUSR); 2983CONFIGFS_ATTR_RO(target_, hba_info);
3308 2984CONFIGFS_ATTR(target_, hba_mode);
3309CONFIGFS_EATTR_OPS(target_core_hba, se_hba, hba_group);
3310 2985
3311static void target_core_hba_release(struct config_item *item) 2986static void target_core_hba_release(struct config_item *item)
3312{ 2987{
@@ -3316,15 +2991,13 @@ static void target_core_hba_release(struct config_item *item)
3316} 2991}
3317 2992
3318static struct configfs_attribute *target_core_hba_attrs[] = { 2993static struct configfs_attribute *target_core_hba_attrs[] = {
3319 &target_core_hba_hba_info.attr, 2994 &target_attr_hba_info,
3320 &target_core_hba_hba_mode.attr, 2995 &target_attr_hba_mode,
3321 NULL, 2996 NULL,
3322}; 2997};
3323 2998
3324static struct configfs_item_operations target_core_hba_item_ops = { 2999static struct configfs_item_operations target_core_hba_item_ops = {
3325 .release = target_core_hba_release, 3000 .release = target_core_hba_release,
3326 .show_attribute = target_core_hba_attr_show,
3327 .store_attribute = target_core_hba_attr_store,
3328}; 3001};
3329 3002
3330static struct config_item_type target_core_hba_cit = { 3003static struct config_item_type target_core_hba_cit = {
diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c
index be42429468e2..f916d18ccb48 100644
--- a/drivers/target/target_core_fabric_configfs.c
+++ b/drivers/target/target_core_fabric_configfs.c
@@ -35,8 +35,6 @@
35 35
36#include <target/target_core_base.h> 36#include <target/target_core_base.h>
37#include <target/target_core_fabric.h> 37#include <target/target_core_fabric.h>
38#include <target/target_core_fabric_configfs.h>
39#include <target/configfs_macros.h>
40 38
41#include "target_core_internal.h" 39#include "target_core_internal.h"
42#include "target_core_alua.h" 40#include "target_core_alua.h"
@@ -152,17 +150,16 @@ static int target_fabric_mappedlun_unlink(
152 return core_dev_del_initiator_node_lun_acl(lun, lacl); 150 return core_dev_del_initiator_node_lun_acl(lun, lacl);
153} 151}
154 152
155CONFIGFS_EATTR_STRUCT(target_fabric_mappedlun, se_lun_acl); 153static struct se_lun_acl *item_to_lun_acl(struct config_item *item)
156#define TCM_MAPPEDLUN_ATTR(_name, _mode) \ 154{
157static struct target_fabric_mappedlun_attribute target_fabric_mappedlun_##_name = \ 155 return container_of(to_config_group(item), struct se_lun_acl,
158 __CONFIGFS_EATTR(_name, _mode, \ 156 se_lun_group);
159 target_fabric_mappedlun_show_##_name, \ 157}
160 target_fabric_mappedlun_store_##_name);
161 158
162static ssize_t target_fabric_mappedlun_show_write_protect( 159static ssize_t target_fabric_mappedlun_write_protect_show(
163 struct se_lun_acl *lacl, 160 struct config_item *item, char *page)
164 char *page)
165{ 161{
162 struct se_lun_acl *lacl = item_to_lun_acl(item);
166 struct se_node_acl *se_nacl = lacl->se_lun_nacl; 163 struct se_node_acl *se_nacl = lacl->se_lun_nacl;
167 struct se_dev_entry *deve; 164 struct se_dev_entry *deve;
168 ssize_t len = 0; 165 ssize_t len = 0;
@@ -178,11 +175,10 @@ static ssize_t target_fabric_mappedlun_show_write_protect(
178 return len; 175 return len;
179} 176}
180 177
181static ssize_t target_fabric_mappedlun_store_write_protect( 178static ssize_t target_fabric_mappedlun_write_protect_store(
182 struct se_lun_acl *lacl, 179 struct config_item *item, const char *page, size_t count)
183 const char *page,
184 size_t count)
185{ 180{
181 struct se_lun_acl *lacl = item_to_lun_acl(item);
186 struct se_node_acl *se_nacl = lacl->se_lun_nacl; 182 struct se_node_acl *se_nacl = lacl->se_lun_nacl;
187 struct se_portal_group *se_tpg = se_nacl->se_tpg; 183 struct se_portal_group *se_tpg = se_nacl->se_tpg;
188 unsigned long op; 184 unsigned long op;
@@ -209,9 +205,12 @@ static ssize_t target_fabric_mappedlun_store_write_protect(
209 205
210} 206}
211 207
212TCM_MAPPEDLUN_ATTR(write_protect, S_IRUGO | S_IWUSR); 208CONFIGFS_ATTR(target_fabric_mappedlun_, write_protect);
213 209
214CONFIGFS_EATTR_OPS(target_fabric_mappedlun, se_lun_acl, se_lun_group); 210static struct configfs_attribute *target_fabric_mappedlun_attrs[] = {
211 &target_fabric_mappedlun_attr_write_protect,
212 NULL,
213};
215 214
216static void target_fabric_mappedlun_release(struct config_item *item) 215static void target_fabric_mappedlun_release(struct config_item *item)
217{ 216{
@@ -222,15 +221,8 @@ static void target_fabric_mappedlun_release(struct config_item *item)
222 core_dev_free_initiator_node_lun_acl(se_tpg, lacl); 221 core_dev_free_initiator_node_lun_acl(se_tpg, lacl);
223} 222}
224 223
225static struct configfs_attribute *target_fabric_mappedlun_attrs[] = {
226 &target_fabric_mappedlun_write_protect.attr,
227 NULL,
228};
229
230static struct configfs_item_operations target_fabric_mappedlun_item_ops = { 224static struct configfs_item_operations target_fabric_mappedlun_item_ops = {
231 .release = target_fabric_mappedlun_release, 225 .release = target_fabric_mappedlun_release,
232 .show_attribute = target_fabric_mappedlun_attr_show,
233 .store_attribute = target_fabric_mappedlun_attr_store,
234 .allow_link = target_fabric_mappedlun_link, 226 .allow_link = target_fabric_mappedlun_link,
235 .drop_link = target_fabric_mappedlun_unlink, 227 .drop_link = target_fabric_mappedlun_unlink,
236}; 228};
@@ -266,49 +258,12 @@ TF_CIT_SETUP(tpg_mappedlun_stat, NULL, &target_fabric_mappedlun_stat_group_ops,
266 258
267/* End of tfc_tpg_mappedlun_port_cit */ 259/* End of tfc_tpg_mappedlun_port_cit */
268 260
269/* Start of tfc_tpg_nacl_attrib_cit */ 261TF_CIT_SETUP_DRV(tpg_nacl_attrib, NULL, NULL);
270 262TF_CIT_SETUP_DRV(tpg_nacl_auth, NULL, NULL);
271CONFIGFS_EATTR_OPS(target_fabric_nacl_attrib, se_node_acl, acl_attrib_group); 263TF_CIT_SETUP_DRV(tpg_nacl_param, NULL, NULL);
272
273static struct configfs_item_operations target_fabric_nacl_attrib_item_ops = {
274 .show_attribute = target_fabric_nacl_attrib_attr_show,
275 .store_attribute = target_fabric_nacl_attrib_attr_store,
276};
277
278TF_CIT_SETUP_DRV(tpg_nacl_attrib, &target_fabric_nacl_attrib_item_ops, NULL);
279
280/* End of tfc_tpg_nacl_attrib_cit */
281
282/* Start of tfc_tpg_nacl_auth_cit */
283
284CONFIGFS_EATTR_OPS(target_fabric_nacl_auth, se_node_acl, acl_auth_group);
285
286static struct configfs_item_operations target_fabric_nacl_auth_item_ops = {
287 .show_attribute = target_fabric_nacl_auth_attr_show,
288 .store_attribute = target_fabric_nacl_auth_attr_store,
289};
290
291TF_CIT_SETUP_DRV(tpg_nacl_auth, &target_fabric_nacl_auth_item_ops, NULL);
292
293/* End of tfc_tpg_nacl_auth_cit */
294
295/* Start of tfc_tpg_nacl_param_cit */
296
297CONFIGFS_EATTR_OPS(target_fabric_nacl_param, se_node_acl, acl_param_group);
298
299static struct configfs_item_operations target_fabric_nacl_param_item_ops = {
300 .show_attribute = target_fabric_nacl_param_attr_show,
301 .store_attribute = target_fabric_nacl_param_attr_store,
302};
303
304TF_CIT_SETUP_DRV(tpg_nacl_param, &target_fabric_nacl_param_item_ops, NULL);
305
306/* End of tfc_tpg_nacl_param_cit */
307 264
308/* Start of tfc_tpg_nacl_base_cit */ 265/* Start of tfc_tpg_nacl_base_cit */
309 266
310CONFIGFS_EATTR_OPS(target_fabric_nacl_base, se_node_acl, acl_group);
311
312static struct config_group *target_fabric_make_mappedlun( 267static struct config_group *target_fabric_make_mappedlun(
313 struct config_group *group, 268 struct config_group *group,
314 const char *name) 269 const char *name)
@@ -438,8 +393,6 @@ static void target_fabric_nacl_base_release(struct config_item *item)
438 393
439static struct configfs_item_operations target_fabric_nacl_base_item_ops = { 394static struct configfs_item_operations target_fabric_nacl_base_item_ops = {
440 .release = target_fabric_nacl_base_release, 395 .release = target_fabric_nacl_base_release,
441 .show_attribute = target_fabric_nacl_base_attr_show,
442 .store_attribute = target_fabric_nacl_base_attr_store,
443}; 396};
444 397
445static struct configfs_group_operations target_fabric_nacl_base_group_ops = { 398static 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 493
541/* Start of tfc_tpg_np_base_cit */ 494/* Start of tfc_tpg_np_base_cit */
542 495
543CONFIGFS_EATTR_OPS(target_fabric_np_base, se_tpg_np, tpg_np_group);
544
545static void target_fabric_np_base_release(struct config_item *item) 496static void target_fabric_np_base_release(struct config_item *item)
546{ 497{
547 struct se_tpg_np *se_tpg_np = container_of(to_config_group(item), 498 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 505
555static struct configfs_item_operations target_fabric_np_base_item_ops = { 506static struct configfs_item_operations target_fabric_np_base_item_ops = {
556 .release = target_fabric_np_base_release, 507 .release = target_fabric_np_base_release,
557 .show_attribute = target_fabric_np_base_attr_show,
558 .store_attribute = target_fabric_np_base_attr_store,
559}; 508};
560 509
561TF_CIT_SETUP_DRV(tpg_np_base, &target_fabric_np_base_item_ops, NULL); 510TF_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 559
611/* Start of tfc_tpg_port_cit */ 560/* Start of tfc_tpg_port_cit */
612 561
613CONFIGFS_EATTR_STRUCT(target_fabric_port, se_lun); 562static struct se_lun *item_to_lun(struct config_item *item)
614#define TCM_PORT_ATTR(_name, _mode) \ 563{
615static struct target_fabric_port_attribute target_fabric_port_##_name = \ 564 return container_of(to_config_group(item), struct se_lun,
616 __CONFIGFS_EATTR(_name, _mode, \ 565 lun_group);
617 target_fabric_port_show_attr_##_name, \ 566}
618 target_fabric_port_store_attr_##_name);
619
620#define TCM_PORT_ATTOR_RO(_name) \
621 __CONFIGFS_EATTR_RO(_name, \
622 target_fabric_port_show_attr_##_name);
623 567
624/* 568static ssize_t target_fabric_port_alua_tg_pt_gp_show(struct config_item *item,
625 * alua_tg_pt_gp 569 char *page)
626 */
627static ssize_t target_fabric_port_show_attr_alua_tg_pt_gp(
628 struct se_lun *lun,
629 char *page)
630{ 570{
571 struct se_lun *lun = item_to_lun(item);
572
631 if (!lun || !lun->lun_se_dev) 573 if (!lun || !lun->lun_se_dev)
632 return -ENODEV; 574 return -ENODEV;
633 575
634 return core_alua_show_tg_pt_gp_info(lun, page); 576 return core_alua_show_tg_pt_gp_info(lun, page);
635} 577}
636 578
637static ssize_t target_fabric_port_store_attr_alua_tg_pt_gp( 579static ssize_t target_fabric_port_alua_tg_pt_gp_store(struct config_item *item,
638 struct se_lun *lun, 580 const char *page, size_t count)
639 const char *page,
640 size_t count)
641{ 581{
582 struct se_lun *lun = item_to_lun(item);
583
642 if (!lun || !lun->lun_se_dev) 584 if (!lun || !lun->lun_se_dev)
643 return -ENODEV; 585 return -ENODEV;
644 586
645 return core_alua_store_tg_pt_gp_info(lun, page, count); 587 return core_alua_store_tg_pt_gp_info(lun, page, count);
646} 588}
647 589
648TCM_PORT_ATTR(alua_tg_pt_gp, S_IRUGO | S_IWUSR); 590static ssize_t target_fabric_port_alua_tg_pt_offline_show(
649 591 struct config_item *item, char *page)
650/*
651 * alua_tg_pt_offline
652 */
653static ssize_t target_fabric_port_show_attr_alua_tg_pt_offline(
654 struct se_lun *lun,
655 char *page)
656{ 592{
593 struct se_lun *lun = item_to_lun(item);
594
657 if (!lun || !lun->lun_se_dev) 595 if (!lun || !lun->lun_se_dev)
658 return -ENODEV; 596 return -ENODEV;
659 597
660 return core_alua_show_offline_bit(lun, page); 598 return core_alua_show_offline_bit(lun, page);
661} 599}
662 600
663static ssize_t target_fabric_port_store_attr_alua_tg_pt_offline( 601static ssize_t target_fabric_port_alua_tg_pt_offline_store(
664 struct se_lun *lun, 602 struct config_item *item, const char *page, size_t count)
665 const char *page,
666 size_t count)
667{ 603{
604 struct se_lun *lun = item_to_lun(item);
605
668 if (!lun || !lun->lun_se_dev) 606 if (!lun || !lun->lun_se_dev)
669 return -ENODEV; 607 return -ENODEV;
670 608
671 return core_alua_store_offline_bit(lun, page, count); 609 return core_alua_store_offline_bit(lun, page, count);
672} 610}
673 611
674TCM_PORT_ATTR(alua_tg_pt_offline, S_IRUGO | S_IWUSR); 612static ssize_t target_fabric_port_alua_tg_pt_status_show(
675 613 struct config_item *item, char *page)
676/*
677 * alua_tg_pt_status
678 */
679static ssize_t target_fabric_port_show_attr_alua_tg_pt_status(
680 struct se_lun *lun,
681 char *page)
682{ 614{
615 struct se_lun *lun = item_to_lun(item);
616
683 if (!lun || !lun->lun_se_dev) 617 if (!lun || !lun->lun_se_dev)
684 return -ENODEV; 618 return -ENODEV;
685 619
686 return core_alua_show_secondary_status(lun, page); 620 return core_alua_show_secondary_status(lun, page);
687} 621}
688 622
689static ssize_t target_fabric_port_store_attr_alua_tg_pt_status( 623static ssize_t target_fabric_port_alua_tg_pt_status_store(
690 struct se_lun *lun, 624 struct config_item *item, const char *page, size_t count)
691 const char *page,
692 size_t count)
693{ 625{
626 struct se_lun *lun = item_to_lun(item);
627
694 if (!lun || !lun->lun_se_dev) 628 if (!lun || !lun->lun_se_dev)
695 return -ENODEV; 629 return -ENODEV;
696 630
697 return core_alua_store_secondary_status(lun, page, count); 631 return core_alua_store_secondary_status(lun, page, count);
698} 632}
699 633
700TCM_PORT_ATTR(alua_tg_pt_status, S_IRUGO | S_IWUSR); 634static ssize_t target_fabric_port_alua_tg_pt_write_md_show(
701 635 struct config_item *item, char *page)
702/*
703 * alua_tg_pt_write_md
704 */
705static ssize_t target_fabric_port_show_attr_alua_tg_pt_write_md(
706 struct se_lun *lun,
707 char *page)
708{ 636{
637 struct se_lun *lun = item_to_lun(item);
638
709 if (!lun || !lun->lun_se_dev) 639 if (!lun || !lun->lun_se_dev)
710 return -ENODEV; 640 return -ENODEV;
711 641
712 return core_alua_show_secondary_write_metadata(lun, page); 642 return core_alua_show_secondary_write_metadata(lun, page);
713} 643}
714 644
715static ssize_t target_fabric_port_store_attr_alua_tg_pt_write_md( 645static ssize_t target_fabric_port_alua_tg_pt_write_md_store(
716 struct se_lun *lun, 646 struct config_item *item, const char *page, size_t count)
717 const char *page,
718 size_t count)
719{ 647{
648 struct se_lun *lun = item_to_lun(item);
649
720 if (!lun || !lun->lun_se_dev) 650 if (!lun || !lun->lun_se_dev)
721 return -ENODEV; 651 return -ENODEV;
722 652
723 return core_alua_store_secondary_write_metadata(lun, page, count); 653 return core_alua_store_secondary_write_metadata(lun, page, count);
724} 654}
725 655
726TCM_PORT_ATTR(alua_tg_pt_write_md, S_IRUGO | S_IWUSR); 656CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_gp);
727 657CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_offline);
658CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_status);
659CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_write_md);
728 660
729static struct configfs_attribute *target_fabric_port_attrs[] = { 661static struct configfs_attribute *target_fabric_port_attrs[] = {
730 &target_fabric_port_alua_tg_pt_gp.attr, 662 &target_fabric_port_attr_alua_tg_pt_gp,
731 &target_fabric_port_alua_tg_pt_offline.attr, 663 &target_fabric_port_attr_alua_tg_pt_offline,
732 &target_fabric_port_alua_tg_pt_status.attr, 664 &target_fabric_port_attr_alua_tg_pt_status,
733 &target_fabric_port_alua_tg_pt_write_md.attr, 665 &target_fabric_port_attr_alua_tg_pt_write_md,
734 NULL, 666 NULL,
735}; 667};
736 668
737CONFIGFS_EATTR_OPS(target_fabric_port, se_lun, lun_group);
738
739static int target_fabric_port_link( 669static int target_fabric_port_link(
740 struct config_item *lun_ci, 670 struct config_item *lun_ci,
741 struct config_item *se_dev_ci) 671 struct config_item *se_dev_ci)
@@ -821,8 +751,6 @@ static void target_fabric_port_release(struct config_item *item)
821} 751}
822 752
823static struct configfs_item_operations target_fabric_port_item_ops = { 753static struct configfs_item_operations target_fabric_port_item_ops = {
824 .show_attribute = target_fabric_port_attr_show,
825 .store_attribute = target_fabric_port_attr_store,
826 .release = target_fabric_port_release, 754 .release = target_fabric_port_release,
827 .allow_link = target_fabric_port_link, 755 .allow_link = target_fabric_port_link,
828 .drop_link = target_fabric_port_unlink, 756 .drop_link = target_fabric_port_unlink,
@@ -952,50 +880,11 @@ TF_CIT_SETUP(tpg_lun, NULL, &target_fabric_lun_group_ops, NULL);
952 880
953/* End of tfc_tpg_lun_cit */ 881/* End of tfc_tpg_lun_cit */
954 882
955/* Start of tfc_tpg_attrib_cit */ 883TF_CIT_SETUP_DRV(tpg_attrib, NULL, NULL);
956 884TF_CIT_SETUP_DRV(tpg_auth, NULL, NULL);
957CONFIGFS_EATTR_OPS(target_fabric_tpg_attrib, se_portal_group, tpg_attrib_group); 885TF_CIT_SETUP_DRV(tpg_param, NULL, NULL);
958
959static struct configfs_item_operations target_fabric_tpg_attrib_item_ops = {
960 .show_attribute = target_fabric_tpg_attrib_attr_show,
961 .store_attribute = target_fabric_tpg_attrib_attr_store,
962};
963
964TF_CIT_SETUP_DRV(tpg_attrib, &target_fabric_tpg_attrib_item_ops, NULL);
965
966/* End of tfc_tpg_attrib_cit */
967
968/* Start of tfc_tpg_auth_cit */
969
970CONFIGFS_EATTR_OPS(target_fabric_tpg_auth, se_portal_group, tpg_auth_group);
971
972static struct configfs_item_operations target_fabric_tpg_auth_item_ops = {
973 .show_attribute = target_fabric_tpg_auth_attr_show,
974 .store_attribute = target_fabric_tpg_auth_attr_store,
975};
976
977TF_CIT_SETUP_DRV(tpg_auth, &target_fabric_tpg_auth_item_ops, NULL);
978
979/* End of tfc_tpg_attrib_cit */
980
981/* Start of tfc_tpg_param_cit */
982
983CONFIGFS_EATTR_OPS(target_fabric_tpg_param, se_portal_group, tpg_param_group);
984
985static struct configfs_item_operations target_fabric_tpg_param_item_ops = {
986 .show_attribute = target_fabric_tpg_param_attr_show,
987 .store_attribute = target_fabric_tpg_param_attr_store,
988};
989
990TF_CIT_SETUP_DRV(tpg_param, &target_fabric_tpg_param_item_ops, NULL);
991
992/* End of tfc_tpg_param_cit */
993 886
994/* Start of tfc_tpg_base_cit */ 887/* Start of tfc_tpg_base_cit */
995/*
996 * For use with TF_TPG_ATTR() and TF_TPG_ATTR_RO()
997 */
998CONFIGFS_EATTR_OPS(target_fabric_tpg, se_portal_group, tpg_group);
999 888
1000static void target_fabric_tpg_release(struct config_item *item) 889static void target_fabric_tpg_release(struct config_item *item)
1001{ 890{
@@ -1009,8 +898,6 @@ static void target_fabric_tpg_release(struct config_item *item)
1009 898
1010static struct configfs_item_operations target_fabric_tpg_base_item_ops = { 899static struct configfs_item_operations target_fabric_tpg_base_item_ops = {
1011 .release = target_fabric_tpg_release, 900 .release = target_fabric_tpg_release,
1012 .show_attribute = target_fabric_tpg_attr_show,
1013 .store_attribute = target_fabric_tpg_attr_store,
1014}; 901};
1015 902
1016TF_CIT_SETUP_DRV(tpg_base, &target_fabric_tpg_base_item_ops, NULL); 903TF_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 .make_group = target_fabric_make_wwn, 1063 .make_group = target_fabric_make_wwn,
1177 .drop_item = target_fabric_drop_wwn, 1064 .drop_item = target_fabric_drop_wwn,
1178}; 1065};
1179/*
1180 * For use with TF_WWN_ATTR() and TF_WWN_ATTR_RO()
1181 */
1182CONFIGFS_EATTR_OPS(target_fabric_wwn, target_fabric_configfs, tf_group);
1183
1184static struct configfs_item_operations target_fabric_wwn_item_ops = {
1185 .show_attribute = target_fabric_wwn_attr_show,
1186 .store_attribute = target_fabric_wwn_attr_store,
1187};
1188
1189TF_CIT_SETUP_DRV(wwn, &target_fabric_wwn_item_ops, &target_fabric_wwn_group_ops);
1190
1191/* End of tfc_wwn_cit */
1192
1193/* Start of tfc_discovery_cit */
1194
1195CONFIGFS_EATTR_OPS(target_fabric_discovery, target_fabric_configfs,
1196 tf_disc_group);
1197
1198static struct configfs_item_operations target_fabric_discovery_item_ops = {
1199 .show_attribute = target_fabric_discovery_attr_show,
1200 .store_attribute = target_fabric_discovery_attr_store,
1201};
1202
1203TF_CIT_SETUP_DRV(discovery, &target_fabric_discovery_item_ops, NULL);
1204 1066
1205/* End of tfc_discovery_cit */ 1067TF_CIT_SETUP_DRV(wwn, NULL, &target_fabric_wwn_group_ops);
1068TF_CIT_SETUP_DRV(discovery, NULL, NULL);
1206 1069
1207int target_fabric_setup_cits(struct target_fabric_configfs *tf) 1070int target_fabric_setup_cits(struct target_fabric_configfs *tf)
1208{ 1071{
diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h
index 99c24acfe676..dae0750c2032 100644
--- a/drivers/target/target_core_internal.h
+++ b/drivers/target/target_core_internal.h
@@ -87,6 +87,9 @@ void target_free_device(struct se_device *);
87/* target_core_configfs.c */ 87/* target_core_configfs.c */
88void target_setup_backend_cits(struct target_backend *); 88void target_setup_backend_cits(struct target_backend *);
89 89
90/* target_core_fabric_configfs.c */
91int target_fabric_setup_cits(struct target_fabric_configfs *);
92
90/* target_core_fabric_lib.c */ 93/* target_core_fabric_lib.c */
91int target_get_pr_transport_id_len(struct se_node_acl *nacl, 94int target_get_pr_transport_id_len(struct se_node_acl *nacl,
92 struct t10_pr_registration *pr_reg, int *format_code); 95 struct t10_pr_registration *pr_reg, int *format_code);
diff --git a/drivers/target/target_core_stat.c b/drivers/target/target_core_stat.c
index 20ed5d2e151a..273c72b2b83d 100644
--- a/drivers/target/target_core_stat.c
+++ b/drivers/target/target_core_stat.c
@@ -37,7 +37,6 @@
37#include <target/target_core_base.h> 37#include <target/target_core_base.h>
38#include <target/target_core_backend.h> 38#include <target/target_core_backend.h>
39#include <target/target_core_fabric.h> 39#include <target/target_core_fabric.h>
40#include <target/configfs_macros.h>
41 40
42#include "target_core_internal.h" 41#include "target_core_internal.h"
43 42
@@ -55,75 +54,49 @@
55 * SCSI Device Table 54 * SCSI Device Table
56 */ 55 */
57 56
58CONFIGFS_EATTR_STRUCT(target_stat_scsi_dev, se_dev_stat_grps); 57static struct se_device *to_stat_dev(struct config_item *item)
59#define DEV_STAT_SCSI_DEV_ATTR(_name, _mode) \ 58{
60static struct target_stat_scsi_dev_attribute \ 59 struct se_dev_stat_grps *sgrps = container_of(to_config_group(item),
61 target_stat_scsi_dev_##_name = \ 60 struct se_dev_stat_grps, scsi_dev_group);
62 __CONFIGFS_EATTR(_name, _mode, \ 61 return container_of(sgrps, struct se_device, dev_stat_grps);
63 target_stat_scsi_dev_show_attr_##_name, \ 62}
64 target_stat_scsi_dev_store_attr_##_name);
65
66#define DEV_STAT_SCSI_DEV_ATTR_RO(_name) \
67static struct target_stat_scsi_dev_attribute \
68 target_stat_scsi_dev_##_name = \
69 __CONFIGFS_EATTR_RO(_name, \
70 target_stat_scsi_dev_show_attr_##_name);
71 63
72static ssize_t target_stat_scsi_dev_show_attr_inst( 64static ssize_t target_stat_inst_show(struct config_item *item, char *page)
73 struct se_dev_stat_grps *sgrps, char *page)
74{ 65{
75 struct se_device *dev = 66 struct se_hba *hba = to_stat_dev(item)->se_hba;
76 container_of(sgrps, struct se_device, dev_stat_grps);
77 struct se_hba *hba = dev->se_hba;
78 67
79 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index); 68 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index);
80} 69}
81DEV_STAT_SCSI_DEV_ATTR_RO(inst);
82 70
83static ssize_t target_stat_scsi_dev_show_attr_indx( 71static ssize_t target_stat_indx_show(struct config_item *item, char *page)
84 struct se_dev_stat_grps *sgrps, char *page)
85{ 72{
86 struct se_device *dev = 73 return snprintf(page, PAGE_SIZE, "%u\n", to_stat_dev(item)->dev_index);
87 container_of(sgrps, struct se_device, dev_stat_grps);
88
89 return snprintf(page, PAGE_SIZE, "%u\n", dev->dev_index);
90} 74}
91DEV_STAT_SCSI_DEV_ATTR_RO(indx);
92 75
93static ssize_t target_stat_scsi_dev_show_attr_role( 76static ssize_t target_stat_role_show(struct config_item *item, char *page)
94 struct se_dev_stat_grps *sgrps, char *page)
95{ 77{
96 return snprintf(page, PAGE_SIZE, "Target\n"); 78 return snprintf(page, PAGE_SIZE, "Target\n");
97} 79}
98DEV_STAT_SCSI_DEV_ATTR_RO(role);
99 80
100static ssize_t target_stat_scsi_dev_show_attr_ports( 81static ssize_t target_stat_ports_show(struct config_item *item, char *page)
101 struct se_dev_stat_grps *sgrps, char *page)
102{ 82{
103 struct se_device *dev = 83 return snprintf(page, PAGE_SIZE, "%u\n", to_stat_dev(item)->export_count);
104 container_of(sgrps, struct se_device, dev_stat_grps);
105
106 return snprintf(page, PAGE_SIZE, "%u\n", dev->export_count);
107} 84}
108DEV_STAT_SCSI_DEV_ATTR_RO(ports);
109 85
110CONFIGFS_EATTR_OPS(target_stat_scsi_dev, se_dev_stat_grps, scsi_dev_group); 86CONFIGFS_ATTR_RO(target_stat_, inst);
87CONFIGFS_ATTR_RO(target_stat_, indx);
88CONFIGFS_ATTR_RO(target_stat_, role);
89CONFIGFS_ATTR_RO(target_stat_, ports);
111 90
112static struct configfs_attribute *target_stat_scsi_dev_attrs[] = { 91static struct configfs_attribute *target_stat_scsi_dev_attrs[] = {
113 &target_stat_scsi_dev_inst.attr, 92 &target_stat_attr_inst,
114 &target_stat_scsi_dev_indx.attr, 93 &target_stat_attr_indx,
115 &target_stat_scsi_dev_role.attr, 94 &target_stat_attr_role,
116 &target_stat_scsi_dev_ports.attr, 95 &target_stat_attr_ports,
117 NULL, 96 NULL,
118}; 97};
119 98
120static struct configfs_item_operations target_stat_scsi_dev_attrib_ops = {
121 .show_attribute = target_stat_scsi_dev_attr_show,
122 .store_attribute = target_stat_scsi_dev_attr_store,
123};
124
125static struct config_item_type target_stat_scsi_dev_cit = { 99static struct config_item_type target_stat_scsi_dev_cit = {
126 .ct_item_ops = &target_stat_scsi_dev_attrib_ops,
127 .ct_attrs = target_stat_scsi_dev_attrs, 100 .ct_attrs = target_stat_scsi_dev_attrs,
128 .ct_owner = THIS_MODULE, 101 .ct_owner = THIS_MODULE,
129}; 102};
@@ -131,109 +104,78 @@ static struct config_item_type target_stat_scsi_dev_cit = {
131/* 104/*
132 * SCSI Target Device Table 105 * SCSI Target Device Table
133 */ 106 */
107static struct se_device *to_stat_tgt_dev(struct config_item *item)
108{
109 struct se_dev_stat_grps *sgrps = container_of(to_config_group(item),
110 struct se_dev_stat_grps, scsi_tgt_dev_group);
111 return container_of(sgrps, struct se_device, dev_stat_grps);
112}
134 113
135CONFIGFS_EATTR_STRUCT(target_stat_scsi_tgt_dev, se_dev_stat_grps); 114static ssize_t target_stat_tgt_inst_show(struct config_item *item, char *page)
136#define DEV_STAT_SCSI_TGT_DEV_ATTR(_name, _mode) \
137static struct target_stat_scsi_tgt_dev_attribute \
138 target_stat_scsi_tgt_dev_##_name = \
139 __CONFIGFS_EATTR(_name, _mode, \
140 target_stat_scsi_tgt_dev_show_attr_##_name, \
141 target_stat_scsi_tgt_dev_store_attr_##_name);
142
143#define DEV_STAT_SCSI_TGT_DEV_ATTR_RO(_name) \
144static struct target_stat_scsi_tgt_dev_attribute \
145 target_stat_scsi_tgt_dev_##_name = \
146 __CONFIGFS_EATTR_RO(_name, \
147 target_stat_scsi_tgt_dev_show_attr_##_name);
148
149static ssize_t target_stat_scsi_tgt_dev_show_attr_inst(
150 struct se_dev_stat_grps *sgrps, char *page)
151{ 115{
152 struct se_device *dev = 116 struct se_hba *hba = to_stat_tgt_dev(item)->se_hba;
153 container_of(sgrps, struct se_device, dev_stat_grps);
154 struct se_hba *hba = dev->se_hba;
155 117
156 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index); 118 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index);
157} 119}
158DEV_STAT_SCSI_TGT_DEV_ATTR_RO(inst);
159 120
160static ssize_t target_stat_scsi_tgt_dev_show_attr_indx( 121static ssize_t target_stat_tgt_indx_show(struct config_item *item, char *page)
161 struct se_dev_stat_grps *sgrps, char *page)
162{ 122{
163 struct se_device *dev = 123 return snprintf(page, PAGE_SIZE, "%u\n", to_stat_tgt_dev(item)->dev_index);
164 container_of(sgrps, struct se_device, dev_stat_grps);
165
166 return snprintf(page, PAGE_SIZE, "%u\n", dev->dev_index);
167} 124}
168DEV_STAT_SCSI_TGT_DEV_ATTR_RO(indx);
169 125
170static ssize_t target_stat_scsi_tgt_dev_show_attr_num_lus( 126static ssize_t target_stat_tgt_num_lus_show(struct config_item *item,
171 struct se_dev_stat_grps *sgrps, char *page) 127 char *page)
172{ 128{
173 return snprintf(page, PAGE_SIZE, "%u\n", LU_COUNT); 129 return snprintf(page, PAGE_SIZE, "%u\n", LU_COUNT);
174} 130}
175DEV_STAT_SCSI_TGT_DEV_ATTR_RO(num_lus);
176 131
177static ssize_t target_stat_scsi_tgt_dev_show_attr_status( 132static ssize_t target_stat_tgt_status_show(struct config_item *item,
178 struct se_dev_stat_grps *sgrps, char *page) 133 char *page)
179{ 134{
180 struct se_device *dev = 135 if (to_stat_tgt_dev(item)->export_count)
181 container_of(sgrps, struct se_device, dev_stat_grps);
182
183 if (dev->export_count)
184 return snprintf(page, PAGE_SIZE, "activated"); 136 return snprintf(page, PAGE_SIZE, "activated");
185 else 137 else
186 return snprintf(page, PAGE_SIZE, "deactivated"); 138 return snprintf(page, PAGE_SIZE, "deactivated");
187} 139}
188DEV_STAT_SCSI_TGT_DEV_ATTR_RO(status);
189 140
190static ssize_t target_stat_scsi_tgt_dev_show_attr_non_access_lus( 141static ssize_t target_stat_tgt_non_access_lus_show(struct config_item *item,
191 struct se_dev_stat_grps *sgrps, char *page) 142 char *page)
192{ 143{
193 struct se_device *dev =
194 container_of(sgrps, struct se_device, dev_stat_grps);
195 int non_accessible_lus; 144 int non_accessible_lus;
196 145
197 if (dev->export_count) 146 if (to_stat_tgt_dev(item)->export_count)
198 non_accessible_lus = 0; 147 non_accessible_lus = 0;
199 else 148 else
200 non_accessible_lus = 1; 149 non_accessible_lus = 1;
201 150
202 return snprintf(page, PAGE_SIZE, "%u\n", non_accessible_lus); 151 return snprintf(page, PAGE_SIZE, "%u\n", non_accessible_lus);
203} 152}
204DEV_STAT_SCSI_TGT_DEV_ATTR_RO(non_access_lus);
205 153
206static ssize_t target_stat_scsi_tgt_dev_show_attr_resets( 154static ssize_t target_stat_tgt_resets_show(struct config_item *item,
207 struct se_dev_stat_grps *sgrps, char *page) 155 char *page)
208{ 156{
209 struct se_device *dev =
210 container_of(sgrps, struct se_device, dev_stat_grps);
211
212 return snprintf(page, PAGE_SIZE, "%lu\n", 157 return snprintf(page, PAGE_SIZE, "%lu\n",
213 atomic_long_read(&dev->num_resets)); 158 atomic_long_read(&to_stat_tgt_dev(item)->num_resets));
214} 159}
215DEV_STAT_SCSI_TGT_DEV_ATTR_RO(resets);
216 160
217 161CONFIGFS_ATTR_RO(target_stat_tgt_, inst);
218CONFIGFS_EATTR_OPS(target_stat_scsi_tgt_dev, se_dev_stat_grps, scsi_tgt_dev_group); 162CONFIGFS_ATTR_RO(target_stat_tgt_, indx);
163CONFIGFS_ATTR_RO(target_stat_tgt_, num_lus);
164CONFIGFS_ATTR_RO(target_stat_tgt_, status);
165CONFIGFS_ATTR_RO(target_stat_tgt_, non_access_lus);
166CONFIGFS_ATTR_RO(target_stat_tgt_, resets);
219 167
220static struct configfs_attribute *target_stat_scsi_tgt_dev_attrs[] = { 168static struct configfs_attribute *target_stat_scsi_tgt_dev_attrs[] = {
221 &target_stat_scsi_tgt_dev_inst.attr, 169 &target_stat_tgt_attr_inst,
222 &target_stat_scsi_tgt_dev_indx.attr, 170 &target_stat_tgt_attr_indx,
223 &target_stat_scsi_tgt_dev_num_lus.attr, 171 &target_stat_tgt_attr_num_lus,
224 &target_stat_scsi_tgt_dev_status.attr, 172 &target_stat_tgt_attr_status,
225 &target_stat_scsi_tgt_dev_non_access_lus.attr, 173 &target_stat_tgt_attr_non_access_lus,
226 &target_stat_scsi_tgt_dev_resets.attr, 174 &target_stat_tgt_attr_resets,
227 NULL, 175 NULL,
228}; 176};
229 177
230static struct configfs_item_operations target_stat_scsi_tgt_dev_attrib_ops = {
231 .show_attribute = target_stat_scsi_tgt_dev_attr_show,
232 .store_attribute = target_stat_scsi_tgt_dev_attr_store,
233};
234
235static struct config_item_type target_stat_scsi_tgt_dev_cit = { 178static struct config_item_type target_stat_scsi_tgt_dev_cit = {
236 .ct_item_ops = &target_stat_scsi_tgt_dev_attrib_ops,
237 .ct_attrs = target_stat_scsi_tgt_dev_attrs, 179 .ct_attrs = target_stat_scsi_tgt_dev_attrs,
238 .ct_owner = THIS_MODULE, 180 .ct_owner = THIS_MODULE,
239}; 181};
@@ -242,72 +184,50 @@ static struct config_item_type target_stat_scsi_tgt_dev_cit = {
242 * SCSI Logical Unit Table 184 * SCSI Logical Unit Table
243 */ 185 */
244 186
245CONFIGFS_EATTR_STRUCT(target_stat_scsi_lu, se_dev_stat_grps); 187static struct se_device *to_stat_lu_dev(struct config_item *item)
246#define DEV_STAT_SCSI_LU_ATTR(_name, _mode) \ 188{
247static struct target_stat_scsi_lu_attribute target_stat_scsi_lu_##_name = \ 189 struct se_dev_stat_grps *sgrps = container_of(to_config_group(item),
248 __CONFIGFS_EATTR(_name, _mode, \ 190 struct se_dev_stat_grps, scsi_lu_group);
249 target_stat_scsi_lu_show_attr_##_name, \ 191 return container_of(sgrps, struct se_device, dev_stat_grps);
250 target_stat_scsi_lu_store_attr_##_name); 192}
251
252#define DEV_STAT_SCSI_LU_ATTR_RO(_name) \
253static struct target_stat_scsi_lu_attribute target_stat_scsi_lu_##_name = \
254 __CONFIGFS_EATTR_RO(_name, \
255 target_stat_scsi_lu_show_attr_##_name);
256 193
257static ssize_t target_stat_scsi_lu_show_attr_inst( 194static ssize_t target_stat_lu_inst_show(struct config_item *item, char *page)
258 struct se_dev_stat_grps *sgrps, char *page)
259{ 195{
260 struct se_device *dev = 196 struct se_hba *hba = to_stat_lu_dev(item)->se_hba;
261 container_of(sgrps, struct se_device, dev_stat_grps);
262 struct se_hba *hba = dev->se_hba;
263 197
264 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index); 198 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index);
265} 199}
266DEV_STAT_SCSI_LU_ATTR_RO(inst);
267 200
268static ssize_t target_stat_scsi_lu_show_attr_dev( 201static ssize_t target_stat_lu_dev_show(struct config_item *item, char *page)
269 struct se_dev_stat_grps *sgrps, char *page)
270{ 202{
271 struct se_device *dev = 203 return snprintf(page, PAGE_SIZE, "%u\n",
272 container_of(sgrps, struct se_device, dev_stat_grps); 204 to_stat_lu_dev(item)->dev_index);
273
274 return snprintf(page, PAGE_SIZE, "%u\n", dev->dev_index);
275} 205}
276DEV_STAT_SCSI_LU_ATTR_RO(dev);
277 206
278static ssize_t target_stat_scsi_lu_show_attr_indx( 207static ssize_t target_stat_lu_indx_show(struct config_item *item, char *page)
279 struct se_dev_stat_grps *sgrps, char *page)
280{ 208{
281 return snprintf(page, PAGE_SIZE, "%u\n", SCSI_LU_INDEX); 209 return snprintf(page, PAGE_SIZE, "%u\n", SCSI_LU_INDEX);
282} 210}
283DEV_STAT_SCSI_LU_ATTR_RO(indx);
284 211
285static ssize_t target_stat_scsi_lu_show_attr_lun( 212static ssize_t target_stat_lu_lun_show(struct config_item *item, char *page)
286 struct se_dev_stat_grps *sgrps, char *page)
287{ 213{
288 /* FIXME: scsiLuDefaultLun */ 214 /* FIXME: scsiLuDefaultLun */
289 return snprintf(page, PAGE_SIZE, "%llu\n", (unsigned long long)0); 215 return snprintf(page, PAGE_SIZE, "%llu\n", (unsigned long long)0);
290} 216}
291DEV_STAT_SCSI_LU_ATTR_RO(lun);
292 217
293static ssize_t target_stat_scsi_lu_show_attr_lu_name( 218static ssize_t target_stat_lu_lu_name_show(struct config_item *item, char *page)
294 struct se_dev_stat_grps *sgrps, char *page)
295{ 219{
296 struct se_device *dev = 220 struct se_device *dev = to_stat_lu_dev(item);
297 container_of(sgrps, struct se_device, dev_stat_grps);
298 221
299 /* scsiLuWwnName */ 222 /* scsiLuWwnName */
300 return snprintf(page, PAGE_SIZE, "%s\n", 223 return snprintf(page, PAGE_SIZE, "%s\n",
301 (strlen(dev->t10_wwn.unit_serial)) ? 224 (strlen(dev->t10_wwn.unit_serial)) ?
302 dev->t10_wwn.unit_serial : "None"); 225 dev->t10_wwn.unit_serial : "None");
303} 226}
304DEV_STAT_SCSI_LU_ATTR_RO(lu_name);
305 227
306static ssize_t target_stat_scsi_lu_show_attr_vend( 228static ssize_t target_stat_lu_vend_show(struct config_item *item, char *page)
307 struct se_dev_stat_grps *sgrps, char *page)
308{ 229{
309 struct se_device *dev = 230 struct se_device *dev = to_stat_lu_dev(item);
310 container_of(sgrps, struct se_device, dev_stat_grps);
311 int i; 231 int i;
312 char str[sizeof(dev->t10_wwn.vendor)+1]; 232 char str[sizeof(dev->t10_wwn.vendor)+1];
313 233
@@ -318,13 +238,10 @@ static ssize_t target_stat_scsi_lu_show_attr_vend(
318 str[i] = '\0'; 238 str[i] = '\0';
319 return snprintf(page, PAGE_SIZE, "%s\n", str); 239 return snprintf(page, PAGE_SIZE, "%s\n", str);
320} 240}
321DEV_STAT_SCSI_LU_ATTR_RO(vend);
322 241
323static ssize_t target_stat_scsi_lu_show_attr_prod( 242static ssize_t target_stat_lu_prod_show(struct config_item *item, char *page)
324 struct se_dev_stat_grps *sgrps, char *page)
325{ 243{
326 struct se_device *dev = 244 struct se_device *dev = to_stat_lu_dev(item);
327 container_of(sgrps, struct se_device, dev_stat_grps);
328 int i; 245 int i;
329 char str[sizeof(dev->t10_wwn.model)+1]; 246 char str[sizeof(dev->t10_wwn.model)+1];
330 247
@@ -335,13 +252,10 @@ static ssize_t target_stat_scsi_lu_show_attr_prod(
335 str[i] = '\0'; 252 str[i] = '\0';
336 return snprintf(page, PAGE_SIZE, "%s\n", str); 253 return snprintf(page, PAGE_SIZE, "%s\n", str);
337} 254}
338DEV_STAT_SCSI_LU_ATTR_RO(prod);
339 255
340static ssize_t target_stat_scsi_lu_show_attr_rev( 256static ssize_t target_stat_lu_rev_show(struct config_item *item, char *page)
341 struct se_dev_stat_grps *sgrps, char *page)
342{ 257{
343 struct se_device *dev = 258 struct se_device *dev = to_stat_lu_dev(item);
344 container_of(sgrps, struct se_device, dev_stat_grps);
345 int i; 259 int i;
346 char str[sizeof(dev->t10_wwn.revision)+1]; 260 char str[sizeof(dev->t10_wwn.revision)+1];
347 261
@@ -352,146 +266,137 @@ static ssize_t target_stat_scsi_lu_show_attr_rev(
352 str[i] = '\0'; 266 str[i] = '\0';
353 return snprintf(page, PAGE_SIZE, "%s\n", str); 267 return snprintf(page, PAGE_SIZE, "%s\n", str);
354} 268}
355DEV_STAT_SCSI_LU_ATTR_RO(rev);
356 269
357static ssize_t target_stat_scsi_lu_show_attr_dev_type( 270static ssize_t target_stat_lu_dev_type_show(struct config_item *item, char *page)
358 struct se_dev_stat_grps *sgrps, char *page)
359{ 271{
360 struct se_device *dev = 272 struct se_device *dev = to_stat_lu_dev(item);
361 container_of(sgrps, struct se_device, dev_stat_grps);
362 273
363 /* scsiLuPeripheralType */ 274 /* scsiLuPeripheralType */
364 return snprintf(page, PAGE_SIZE, "%u\n", 275 return snprintf(page, PAGE_SIZE, "%u\n",
365 dev->transport->get_device_type(dev)); 276 dev->transport->get_device_type(dev));
366} 277}
367DEV_STAT_SCSI_LU_ATTR_RO(dev_type);
368 278
369static ssize_t target_stat_scsi_lu_show_attr_status( 279static ssize_t target_stat_lu_status_show(struct config_item *item, char *page)
370 struct se_dev_stat_grps *sgrps, char *page)
371{ 280{
372 struct se_device *dev = 281 struct se_device *dev = to_stat_lu_dev(item);
373 container_of(sgrps, struct se_device, dev_stat_grps);
374 282
375 /* scsiLuStatus */ 283 /* scsiLuStatus */
376 return snprintf(page, PAGE_SIZE, "%s\n", 284 return snprintf(page, PAGE_SIZE, "%s\n",
377 (dev->export_count) ? "available" : "notavailable"); 285 (dev->export_count) ? "available" : "notavailable");
378} 286}
379DEV_STAT_SCSI_LU_ATTR_RO(status);
380 287
381static ssize_t target_stat_scsi_lu_show_attr_state_bit( 288static ssize_t target_stat_lu_state_bit_show(struct config_item *item,
382 struct se_dev_stat_grps *sgrps, char *page) 289 char *page)
383{ 290{
384 /* scsiLuState */ 291 /* scsiLuState */
385 return snprintf(page, PAGE_SIZE, "exposed\n"); 292 return snprintf(page, PAGE_SIZE, "exposed\n");
386} 293}
387DEV_STAT_SCSI_LU_ATTR_RO(state_bit);
388 294
389static ssize_t target_stat_scsi_lu_show_attr_num_cmds( 295static ssize_t target_stat_lu_num_cmds_show(struct config_item *item,
390 struct se_dev_stat_grps *sgrps, char *page) 296 char *page)
391{ 297{
392 struct se_device *dev = 298 struct se_device *dev = to_stat_lu_dev(item);
393 container_of(sgrps, struct se_device, dev_stat_grps);
394 299
395 /* scsiLuNumCommands */ 300 /* scsiLuNumCommands */
396 return snprintf(page, PAGE_SIZE, "%lu\n", 301 return snprintf(page, PAGE_SIZE, "%lu\n",
397 atomic_long_read(&dev->num_cmds)); 302 atomic_long_read(&dev->num_cmds));
398} 303}
399DEV_STAT_SCSI_LU_ATTR_RO(num_cmds);
400 304
401static ssize_t target_stat_scsi_lu_show_attr_read_mbytes( 305static ssize_t target_stat_lu_read_mbytes_show(struct config_item *item,
402 struct se_dev_stat_grps *sgrps, char *page) 306 char *page)
403{ 307{
404 struct se_device *dev = 308 struct se_device *dev = to_stat_lu_dev(item);
405 container_of(sgrps, struct se_device, dev_stat_grps);
406 309
407 /* scsiLuReadMegaBytes */ 310 /* scsiLuReadMegaBytes */
408 return snprintf(page, PAGE_SIZE, "%lu\n", 311 return snprintf(page, PAGE_SIZE, "%lu\n",
409 atomic_long_read(&dev->read_bytes) >> 20); 312 atomic_long_read(&dev->read_bytes) >> 20);
410} 313}
411DEV_STAT_SCSI_LU_ATTR_RO(read_mbytes);
412 314
413static ssize_t target_stat_scsi_lu_show_attr_write_mbytes( 315static ssize_t target_stat_lu_write_mbytes_show(struct config_item *item,
414 struct se_dev_stat_grps *sgrps, char *page) 316 char *page)
415{ 317{
416 struct se_device *dev = 318 struct se_device *dev = to_stat_lu_dev(item);
417 container_of(sgrps, struct se_device, dev_stat_grps);
418 319
419 /* scsiLuWrittenMegaBytes */ 320 /* scsiLuWrittenMegaBytes */
420 return snprintf(page, PAGE_SIZE, "%lu\n", 321 return snprintf(page, PAGE_SIZE, "%lu\n",
421 atomic_long_read(&dev->write_bytes) >> 20); 322 atomic_long_read(&dev->write_bytes) >> 20);
422} 323}
423DEV_STAT_SCSI_LU_ATTR_RO(write_mbytes);
424 324
425static ssize_t target_stat_scsi_lu_show_attr_resets( 325static ssize_t target_stat_lu_resets_show(struct config_item *item, char *page)
426 struct se_dev_stat_grps *sgrps, char *page)
427{ 326{
428 struct se_device *dev = 327 struct se_device *dev = to_stat_lu_dev(item);
429 container_of(sgrps, struct se_device, dev_stat_grps);
430 328
431 /* scsiLuInResets */ 329 /* scsiLuInResets */
432 return snprintf(page, PAGE_SIZE, "%lu\n", atomic_long_read(&dev->num_resets)); 330 return snprintf(page, PAGE_SIZE, "%lu\n",
331 atomic_long_read(&dev->num_resets));
433} 332}
434DEV_STAT_SCSI_LU_ATTR_RO(resets);
435 333
436static ssize_t target_stat_scsi_lu_show_attr_full_stat( 334static ssize_t target_stat_lu_full_stat_show(struct config_item *item,
437 struct se_dev_stat_grps *sgrps, char *page) 335 char *page)
438{ 336{
439 /* FIXME: scsiLuOutTaskSetFullStatus */ 337 /* FIXME: scsiLuOutTaskSetFullStatus */
440 return snprintf(page, PAGE_SIZE, "%u\n", 0); 338 return snprintf(page, PAGE_SIZE, "%u\n", 0);
441} 339}
442DEV_STAT_SCSI_LU_ATTR_RO(full_stat);
443 340
444static ssize_t target_stat_scsi_lu_show_attr_hs_num_cmds( 341static ssize_t target_stat_lu_hs_num_cmds_show(struct config_item *item,
445 struct se_dev_stat_grps *sgrps, char *page) 342 char *page)
446{ 343{
447 /* FIXME: scsiLuHSInCommands */ 344 /* FIXME: scsiLuHSInCommands */
448 return snprintf(page, PAGE_SIZE, "%u\n", 0); 345 return snprintf(page, PAGE_SIZE, "%u\n", 0);
449} 346}
450DEV_STAT_SCSI_LU_ATTR_RO(hs_num_cmds);
451 347
452static ssize_t target_stat_scsi_lu_show_attr_creation_time( 348static ssize_t target_stat_lu_creation_time_show(struct config_item *item,
453 struct se_dev_stat_grps *sgrps, char *page) 349 char *page)
454{ 350{
455 struct se_device *dev = 351 struct se_device *dev = to_stat_lu_dev(item);
456 container_of(sgrps, struct se_device, dev_stat_grps);
457 352
458 /* scsiLuCreationTime */ 353 /* scsiLuCreationTime */
459 return snprintf(page, PAGE_SIZE, "%u\n", (u32)(((u32)dev->creation_time - 354 return snprintf(page, PAGE_SIZE, "%u\n", (u32)(((u32)dev->creation_time -
460 INITIAL_JIFFIES) * 100 / HZ)); 355 INITIAL_JIFFIES) * 100 / HZ));
461} 356}
462DEV_STAT_SCSI_LU_ATTR_RO(creation_time);
463 357
464CONFIGFS_EATTR_OPS(target_stat_scsi_lu, se_dev_stat_grps, scsi_lu_group); 358CONFIGFS_ATTR_RO(target_stat_lu_, inst);
359CONFIGFS_ATTR_RO(target_stat_lu_, dev);
360CONFIGFS_ATTR_RO(target_stat_lu_, indx);
361CONFIGFS_ATTR_RO(target_stat_lu_, lun);
362CONFIGFS_ATTR_RO(target_stat_lu_, lu_name);
363CONFIGFS_ATTR_RO(target_stat_lu_, vend);
364CONFIGFS_ATTR_RO(target_stat_lu_, prod);
365CONFIGFS_ATTR_RO(target_stat_lu_, rev);
366CONFIGFS_ATTR_RO(target_stat_lu_, dev_type);
367CONFIGFS_ATTR_RO(target_stat_lu_, status);
368CONFIGFS_ATTR_RO(target_stat_lu_, state_bit);
369CONFIGFS_ATTR_RO(target_stat_lu_, num_cmds);
370CONFIGFS_ATTR_RO(target_stat_lu_, read_mbytes);
371CONFIGFS_ATTR_RO(target_stat_lu_, write_mbytes);
372CONFIGFS_ATTR_RO(target_stat_lu_, resets);
373CONFIGFS_ATTR_RO(target_stat_lu_, full_stat);
374CONFIGFS_ATTR_RO(target_stat_lu_, hs_num_cmds);
375CONFIGFS_ATTR_RO(target_stat_lu_, creation_time);
465 376
466static struct configfs_attribute *target_stat_scsi_lu_attrs[] = { 377static struct configfs_attribute *target_stat_scsi_lu_attrs[] = {
467 &target_stat_scsi_lu_inst.attr, 378 &target_stat_lu_attr_inst,
468 &target_stat_scsi_lu_dev.attr, 379 &target_stat_lu_attr_dev,
469 &target_stat_scsi_lu_indx.attr, 380 &target_stat_lu_attr_indx,
470 &target_stat_scsi_lu_lun.attr, 381 &target_stat_lu_attr_lun,
471 &target_stat_scsi_lu_lu_name.attr, 382 &target_stat_lu_attr_lu_name,
472 &target_stat_scsi_lu_vend.attr, 383 &target_stat_lu_attr_vend,
473 &target_stat_scsi_lu_prod.attr, 384 &target_stat_lu_attr_prod,
474 &target_stat_scsi_lu_rev.attr, 385 &target_stat_lu_attr_rev,
475 &target_stat_scsi_lu_dev_type.attr, 386 &target_stat_lu_attr_dev_type,
476 &target_stat_scsi_lu_status.attr, 387 &target_stat_lu_attr_status,
477 &target_stat_scsi_lu_state_bit.attr, 388 &target_stat_lu_attr_state_bit,
478 &target_stat_scsi_lu_num_cmds.attr, 389 &target_stat_lu_attr_num_cmds,
479 &target_stat_scsi_lu_read_mbytes.attr, 390 &target_stat_lu_attr_read_mbytes,
480 &target_stat_scsi_lu_write_mbytes.attr, 391 &target_stat_lu_attr_write_mbytes,
481 &target_stat_scsi_lu_resets.attr, 392 &target_stat_lu_attr_resets,
482 &target_stat_scsi_lu_full_stat.attr, 393 &target_stat_lu_attr_full_stat,
483 &target_stat_scsi_lu_hs_num_cmds.attr, 394 &target_stat_lu_attr_hs_num_cmds,
484 &target_stat_scsi_lu_creation_time.attr, 395 &target_stat_lu_attr_creation_time,
485 NULL, 396 NULL,
486}; 397};
487 398
488static struct configfs_item_operations target_stat_scsi_lu_attrib_ops = {
489 .show_attribute = target_stat_scsi_lu_attr_show,
490 .store_attribute = target_stat_scsi_lu_attr_store,
491};
492
493static struct config_item_type target_stat_scsi_lu_cit = { 399static struct config_item_type target_stat_scsi_lu_cit = {
494 .ct_item_ops = &target_stat_scsi_lu_attrib_ops,
495 .ct_attrs = target_stat_scsi_lu_attrs, 400 .ct_attrs = target_stat_scsi_lu_attrs,
496 .ct_owner = THIS_MODULE, 401 .ct_owner = THIS_MODULE,
497}; 402};
@@ -521,24 +426,16 @@ void target_stat_setup_dev_default_groups(struct se_device *dev)
521 * SCSI Port Table 426 * SCSI Port Table
522 */ 427 */
523 428
524CONFIGFS_EATTR_STRUCT(target_stat_scsi_port, se_port_stat_grps); 429static struct se_lun *to_stat_port(struct config_item *item)
525#define DEV_STAT_SCSI_PORT_ATTR(_name, _mode) \ 430{
526static struct target_stat_scsi_port_attribute \ 431 struct se_port_stat_grps *pgrps = container_of(to_config_group(item),
527 target_stat_scsi_port_##_name = \ 432 struct se_port_stat_grps, scsi_port_group);
528 __CONFIGFS_EATTR(_name, _mode, \ 433 return container_of(pgrps, struct se_lun, port_stat_grps);
529 target_stat_scsi_port_show_attr_##_name, \ 434}
530 target_stat_scsi_port_store_attr_##_name);
531
532#define DEV_STAT_SCSI_PORT_ATTR_RO(_name) \
533static struct target_stat_scsi_port_attribute \
534 target_stat_scsi_port_##_name = \
535 __CONFIGFS_EATTR_RO(_name, \
536 target_stat_scsi_port_show_attr_##_name);
537 435
538static ssize_t target_stat_scsi_port_show_attr_inst( 436static ssize_t target_stat_port_inst_show(struct config_item *item, char *page)
539 struct se_port_stat_grps *pgrps, char *page)
540{ 437{
541 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 438 struct se_lun *lun = to_stat_port(item);
542 struct se_device *dev; 439 struct se_device *dev;
543 ssize_t ret = -ENODEV; 440 ssize_t ret = -ENODEV;
544 441
@@ -549,12 +446,10 @@ static ssize_t target_stat_scsi_port_show_attr_inst(
549 rcu_read_unlock(); 446 rcu_read_unlock();
550 return ret; 447 return ret;
551} 448}
552DEV_STAT_SCSI_PORT_ATTR_RO(inst);
553 449
554static ssize_t target_stat_scsi_port_show_attr_dev( 450static ssize_t target_stat_port_dev_show(struct config_item *item, char *page)
555 struct se_port_stat_grps *pgrps, char *page)
556{ 451{
557 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 452 struct se_lun *lun = to_stat_port(item);
558 struct se_device *dev; 453 struct se_device *dev;
559 ssize_t ret = -ENODEV; 454 ssize_t ret = -ENODEV;
560 455
@@ -565,12 +460,10 @@ static ssize_t target_stat_scsi_port_show_attr_dev(
565 rcu_read_unlock(); 460 rcu_read_unlock();
566 return ret; 461 return ret;
567} 462}
568DEV_STAT_SCSI_PORT_ATTR_RO(dev);
569 463
570static ssize_t target_stat_scsi_port_show_attr_indx( 464static ssize_t target_stat_port_indx_show(struct config_item *item, char *page)
571 struct se_port_stat_grps *pgrps, char *page)
572{ 465{
573 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 466 struct se_lun *lun = to_stat_port(item);
574 struct se_device *dev; 467 struct se_device *dev;
575 ssize_t ret = -ENODEV; 468 ssize_t ret = -ENODEV;
576 469
@@ -581,12 +474,10 @@ static ssize_t target_stat_scsi_port_show_attr_indx(
581 rcu_read_unlock(); 474 rcu_read_unlock();
582 return ret; 475 return ret;
583} 476}
584DEV_STAT_SCSI_PORT_ATTR_RO(indx);
585 477
586static ssize_t target_stat_scsi_port_show_attr_role( 478static ssize_t target_stat_port_role_show(struct config_item *item, char *page)
587 struct se_port_stat_grps *pgrps, char *page)
588{ 479{
589 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 480 struct se_lun *lun = to_stat_port(item);
590 struct se_device *dev; 481 struct se_device *dev;
591 ssize_t ret = -ENODEV; 482 ssize_t ret = -ENODEV;
592 483
@@ -597,12 +488,11 @@ static ssize_t target_stat_scsi_port_show_attr_role(
597 rcu_read_unlock(); 488 rcu_read_unlock();
598 return ret; 489 return ret;
599} 490}
600DEV_STAT_SCSI_PORT_ATTR_RO(role);
601 491
602static ssize_t target_stat_scsi_port_show_attr_busy_count( 492static ssize_t target_stat_port_busy_count_show(struct config_item *item,
603 struct se_port_stat_grps *pgrps, char *page) 493 char *page)
604{ 494{
605 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 495 struct se_lun *lun = to_stat_port(item);
606 struct se_device *dev; 496 struct se_device *dev;
607 ssize_t ret = -ENODEV; 497 ssize_t ret = -ENODEV;
608 498
@@ -615,26 +505,23 @@ static ssize_t target_stat_scsi_port_show_attr_busy_count(
615 rcu_read_unlock(); 505 rcu_read_unlock();
616 return ret; 506 return ret;
617} 507}
618DEV_STAT_SCSI_PORT_ATTR_RO(busy_count);
619 508
620CONFIGFS_EATTR_OPS(target_stat_scsi_port, se_port_stat_grps, scsi_port_group); 509CONFIGFS_ATTR_RO(target_stat_port_, inst);
510CONFIGFS_ATTR_RO(target_stat_port_, dev);
511CONFIGFS_ATTR_RO(target_stat_port_, indx);
512CONFIGFS_ATTR_RO(target_stat_port_, role);
513CONFIGFS_ATTR_RO(target_stat_port_, busy_count);
621 514
622static struct configfs_attribute *target_stat_scsi_port_attrs[] = { 515static struct configfs_attribute *target_stat_scsi_port_attrs[] = {
623 &target_stat_scsi_port_inst.attr, 516 &target_stat_port_attr_inst,
624 &target_stat_scsi_port_dev.attr, 517 &target_stat_port_attr_dev,
625 &target_stat_scsi_port_indx.attr, 518 &target_stat_port_attr_indx,
626 &target_stat_scsi_port_role.attr, 519 &target_stat_port_attr_role,
627 &target_stat_scsi_port_busy_count.attr, 520 &target_stat_port_attr_busy_count,
628 NULL, 521 NULL,
629}; 522};
630 523
631static struct configfs_item_operations target_stat_scsi_port_attrib_ops = {
632 .show_attribute = target_stat_scsi_port_attr_show,
633 .store_attribute = target_stat_scsi_port_attr_store,
634};
635
636static struct config_item_type target_stat_scsi_port_cit = { 524static struct config_item_type target_stat_scsi_port_cit = {
637 .ct_item_ops = &target_stat_scsi_port_attrib_ops,
638 .ct_attrs = target_stat_scsi_port_attrs, 525 .ct_attrs = target_stat_scsi_port_attrs,
639 .ct_owner = THIS_MODULE, 526 .ct_owner = THIS_MODULE,
640}; 527};
@@ -642,24 +529,17 @@ static struct config_item_type target_stat_scsi_port_cit = {
642/* 529/*
643 * SCSI Target Port Table 530 * SCSI Target Port Table
644 */ 531 */
645CONFIGFS_EATTR_STRUCT(target_stat_scsi_tgt_port, se_port_stat_grps); 532static struct se_lun *to_stat_tgt_port(struct config_item *item)
646#define DEV_STAT_SCSI_TGT_PORT_ATTR(_name, _mode) \ 533{
647static struct target_stat_scsi_tgt_port_attribute \ 534 struct se_port_stat_grps *pgrps = container_of(to_config_group(item),
648 target_stat_scsi_tgt_port_##_name = \ 535 struct se_port_stat_grps, scsi_tgt_port_group);
649 __CONFIGFS_EATTR(_name, _mode, \ 536 return container_of(pgrps, struct se_lun, port_stat_grps);
650 target_stat_scsi_tgt_port_show_attr_##_name, \ 537}
651 target_stat_scsi_tgt_port_store_attr_##_name); 538
652 539static ssize_t target_stat_tgt_port_inst_show(struct config_item *item,
653#define DEV_STAT_SCSI_TGT_PORT_ATTR_RO(_name) \ 540 char *page)
654static struct target_stat_scsi_tgt_port_attribute \ 541{
655 target_stat_scsi_tgt_port_##_name = \ 542 struct se_lun *lun = to_stat_tgt_port(item);
656 __CONFIGFS_EATTR_RO(_name, \
657 target_stat_scsi_tgt_port_show_attr_##_name);
658
659static ssize_t target_stat_scsi_tgt_port_show_attr_inst(
660 struct se_port_stat_grps *pgrps, char *page)
661{
662 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps);
663 struct se_device *dev; 543 struct se_device *dev;
664 ssize_t ret = -ENODEV; 544 ssize_t ret = -ENODEV;
665 545
@@ -670,12 +550,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_inst(
670 rcu_read_unlock(); 550 rcu_read_unlock();
671 return ret; 551 return ret;
672} 552}
673DEV_STAT_SCSI_TGT_PORT_ATTR_RO(inst);
674 553
675static ssize_t target_stat_scsi_tgt_port_show_attr_dev( 554static ssize_t target_stat_tgt_port_dev_show(struct config_item *item,
676 struct se_port_stat_grps *pgrps, char *page) 555 char *page)
677{ 556{
678 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 557 struct se_lun *lun = to_stat_tgt_port(item);
679 struct se_device *dev; 558 struct se_device *dev;
680 ssize_t ret = -ENODEV; 559 ssize_t ret = -ENODEV;
681 560
@@ -686,12 +565,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_dev(
686 rcu_read_unlock(); 565 rcu_read_unlock();
687 return ret; 566 return ret;
688} 567}
689DEV_STAT_SCSI_TGT_PORT_ATTR_RO(dev);
690 568
691static ssize_t target_stat_scsi_tgt_port_show_attr_indx( 569static ssize_t target_stat_tgt_port_indx_show(struct config_item *item,
692 struct se_port_stat_grps *pgrps, char *page) 570 char *page)
693{ 571{
694 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 572 struct se_lun *lun = to_stat_tgt_port(item);
695 struct se_device *dev; 573 struct se_device *dev;
696 ssize_t ret = -ENODEV; 574 ssize_t ret = -ENODEV;
697 575
@@ -702,12 +580,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_indx(
702 rcu_read_unlock(); 580 rcu_read_unlock();
703 return ret; 581 return ret;
704} 582}
705DEV_STAT_SCSI_TGT_PORT_ATTR_RO(indx);
706 583
707static ssize_t target_stat_scsi_tgt_port_show_attr_name( 584static ssize_t target_stat_tgt_port_name_show(struct config_item *item,
708 struct se_port_stat_grps *pgrps, char *page) 585 char *page)
709{ 586{
710 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 587 struct se_lun *lun = to_stat_tgt_port(item);
711 struct se_portal_group *tpg = lun->lun_tpg; 588 struct se_portal_group *tpg = lun->lun_tpg;
712 struct se_device *dev; 589 struct se_device *dev;
713 ssize_t ret = -ENODEV; 590 ssize_t ret = -ENODEV;
@@ -721,12 +598,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_name(
721 rcu_read_unlock(); 598 rcu_read_unlock();
722 return ret; 599 return ret;
723} 600}
724DEV_STAT_SCSI_TGT_PORT_ATTR_RO(name);
725 601
726static ssize_t target_stat_scsi_tgt_port_show_attr_port_index( 602static ssize_t target_stat_tgt_port_port_index_show(struct config_item *item,
727 struct se_port_stat_grps *pgrps, char *page) 603 char *page)
728{ 604{
729 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 605 struct se_lun *lun = to_stat_tgt_port(item);
730 struct se_portal_group *tpg = lun->lun_tpg; 606 struct se_portal_group *tpg = lun->lun_tpg;
731 struct se_device *dev; 607 struct se_device *dev;
732 ssize_t ret = -ENODEV; 608 ssize_t ret = -ENODEV;
@@ -740,12 +616,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_port_index(
740 rcu_read_unlock(); 616 rcu_read_unlock();
741 return ret; 617 return ret;
742} 618}
743DEV_STAT_SCSI_TGT_PORT_ATTR_RO(port_index);
744 619
745static ssize_t target_stat_scsi_tgt_port_show_attr_in_cmds( 620static ssize_t target_stat_tgt_port_in_cmds_show(struct config_item *item,
746 struct se_port_stat_grps *pgrps, char *page) 621 char *page)
747{ 622{
748 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 623 struct se_lun *lun = to_stat_tgt_port(item);
749 struct se_device *dev; 624 struct se_device *dev;
750 ssize_t ret = -ENODEV; 625 ssize_t ret = -ENODEV;
751 626
@@ -757,12 +632,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_in_cmds(
757 rcu_read_unlock(); 632 rcu_read_unlock();
758 return ret; 633 return ret;
759} 634}
760DEV_STAT_SCSI_TGT_PORT_ATTR_RO(in_cmds);
761 635
762static ssize_t target_stat_scsi_tgt_port_show_attr_write_mbytes( 636static ssize_t target_stat_tgt_port_write_mbytes_show(struct config_item *item,
763 struct se_port_stat_grps *pgrps, char *page) 637 char *page)
764{ 638{
765 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 639 struct se_lun *lun = to_stat_tgt_port(item);
766 struct se_device *dev; 640 struct se_device *dev;
767 ssize_t ret = -ENODEV; 641 ssize_t ret = -ENODEV;
768 642
@@ -774,12 +648,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_write_mbytes(
774 rcu_read_unlock(); 648 rcu_read_unlock();
775 return ret; 649 return ret;
776} 650}
777DEV_STAT_SCSI_TGT_PORT_ATTR_RO(write_mbytes);
778 651
779static ssize_t target_stat_scsi_tgt_port_show_attr_read_mbytes( 652static ssize_t target_stat_tgt_port_read_mbytes_show(struct config_item *item,
780 struct se_port_stat_grps *pgrps, char *page) 653 char *page)
781{ 654{
782 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 655 struct se_lun *lun = to_stat_tgt_port(item);
783 struct se_device *dev; 656 struct se_device *dev;
784 ssize_t ret = -ENODEV; 657 ssize_t ret = -ENODEV;
785 658
@@ -791,12 +664,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_read_mbytes(
791 rcu_read_unlock(); 664 rcu_read_unlock();
792 return ret; 665 return ret;
793} 666}
794DEV_STAT_SCSI_TGT_PORT_ATTR_RO(read_mbytes);
795 667
796static ssize_t target_stat_scsi_tgt_port_show_attr_hs_in_cmds( 668static ssize_t target_stat_tgt_port_hs_in_cmds_show(struct config_item *item,
797 struct se_port_stat_grps *pgrps, char *page) 669 char *page)
798{ 670{
799 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 671 struct se_lun *lun = to_stat_tgt_port(item);
800 struct se_device *dev; 672 struct se_device *dev;
801 ssize_t ret = -ENODEV; 673 ssize_t ret = -ENODEV;
802 674
@@ -809,57 +681,49 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_hs_in_cmds(
809 rcu_read_unlock(); 681 rcu_read_unlock();
810 return ret; 682 return ret;
811} 683}
812DEV_STAT_SCSI_TGT_PORT_ATTR_RO(hs_in_cmds);
813 684
814CONFIGFS_EATTR_OPS(target_stat_scsi_tgt_port, se_port_stat_grps, 685CONFIGFS_ATTR_RO(target_stat_tgt_port_, inst);
815 scsi_tgt_port_group); 686CONFIGFS_ATTR_RO(target_stat_tgt_port_, dev);
687CONFIGFS_ATTR_RO(target_stat_tgt_port_, indx);
688CONFIGFS_ATTR_RO(target_stat_tgt_port_, name);
689CONFIGFS_ATTR_RO(target_stat_tgt_port_, port_index);
690CONFIGFS_ATTR_RO(target_stat_tgt_port_, in_cmds);
691CONFIGFS_ATTR_RO(target_stat_tgt_port_, write_mbytes);
692CONFIGFS_ATTR_RO(target_stat_tgt_port_, read_mbytes);
693CONFIGFS_ATTR_RO(target_stat_tgt_port_, hs_in_cmds);
816 694
817static struct configfs_attribute *target_stat_scsi_tgt_port_attrs[] = { 695static struct configfs_attribute *target_stat_scsi_tgt_port_attrs[] = {
818 &target_stat_scsi_tgt_port_inst.attr, 696 &target_stat_tgt_port_attr_inst,
819 &target_stat_scsi_tgt_port_dev.attr, 697 &target_stat_tgt_port_attr_dev,
820 &target_stat_scsi_tgt_port_indx.attr, 698 &target_stat_tgt_port_attr_indx,
821 &target_stat_scsi_tgt_port_name.attr, 699 &target_stat_tgt_port_attr_name,
822 &target_stat_scsi_tgt_port_port_index.attr, 700 &target_stat_tgt_port_attr_port_index,
823 &target_stat_scsi_tgt_port_in_cmds.attr, 701 &target_stat_tgt_port_attr_in_cmds,
824 &target_stat_scsi_tgt_port_write_mbytes.attr, 702 &target_stat_tgt_port_attr_write_mbytes,
825 &target_stat_scsi_tgt_port_read_mbytes.attr, 703 &target_stat_tgt_port_attr_read_mbytes,
826 &target_stat_scsi_tgt_port_hs_in_cmds.attr, 704 &target_stat_tgt_port_attr_hs_in_cmds,
827 NULL, 705 NULL,
828}; 706};
829 707
830static struct configfs_item_operations target_stat_scsi_tgt_port_attrib_ops = {
831 .show_attribute = target_stat_scsi_tgt_port_attr_show,
832 .store_attribute = target_stat_scsi_tgt_port_attr_store,
833};
834
835static struct config_item_type target_stat_scsi_tgt_port_cit = { 708static struct config_item_type target_stat_scsi_tgt_port_cit = {
836 .ct_item_ops = &target_stat_scsi_tgt_port_attrib_ops,
837 .ct_attrs = target_stat_scsi_tgt_port_attrs, 709 .ct_attrs = target_stat_scsi_tgt_port_attrs,
838 .ct_owner = THIS_MODULE, 710 .ct_owner = THIS_MODULE,
839}; 711};
840 712
841/* 713/*
842 * SCSI Transport Table 714 * SCSI Transport Table
843o */ 715 */
844 716static struct se_lun *to_transport_stat(struct config_item *item)
845CONFIGFS_EATTR_STRUCT(target_stat_scsi_transport, se_port_stat_grps); 717{
846#define DEV_STAT_SCSI_TRANSPORT_ATTR(_name, _mode) \ 718 struct se_port_stat_grps *pgrps = container_of(to_config_group(item),
847static struct target_stat_scsi_transport_attribute \ 719 struct se_port_stat_grps, scsi_transport_group);
848 target_stat_scsi_transport_##_name = \ 720 return container_of(pgrps, struct se_lun, port_stat_grps);
849 __CONFIGFS_EATTR(_name, _mode, \ 721}
850 target_stat_scsi_transport_show_attr_##_name, \ 722
851 target_stat_scsi_transport_store_attr_##_name); 723static ssize_t target_stat_transport_inst_show(struct config_item *item,
852 724 char *page)
853#define DEV_STAT_SCSI_TRANSPORT_ATTR_RO(_name) \ 725{
854static struct target_stat_scsi_transport_attribute \ 726 struct se_lun *lun = to_transport_stat(item);
855 target_stat_scsi_transport_##_name = \
856 __CONFIGFS_EATTR_RO(_name, \
857 target_stat_scsi_transport_show_attr_##_name);
858
859static ssize_t target_stat_scsi_transport_show_attr_inst(
860 struct se_port_stat_grps *pgrps, char *page)
861{
862 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps);
863 struct se_device *dev; 727 struct se_device *dev;
864 ssize_t ret = -ENODEV; 728 ssize_t ret = -ENODEV;
865 729
@@ -870,12 +734,11 @@ static ssize_t target_stat_scsi_transport_show_attr_inst(
870 rcu_read_unlock(); 734 rcu_read_unlock();
871 return ret; 735 return ret;
872} 736}
873DEV_STAT_SCSI_TRANSPORT_ATTR_RO(inst);
874 737
875static ssize_t target_stat_scsi_transport_show_attr_device( 738static ssize_t target_stat_transport_device_show(struct config_item *item,
876 struct se_port_stat_grps *pgrps, char *page) 739 char *page)
877{ 740{
878 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 741 struct se_lun *lun = to_transport_stat(item);
879 struct se_device *dev; 742 struct se_device *dev;
880 struct se_portal_group *tpg = lun->lun_tpg; 743 struct se_portal_group *tpg = lun->lun_tpg;
881 ssize_t ret = -ENODEV; 744 ssize_t ret = -ENODEV;
@@ -890,12 +753,11 @@ static ssize_t target_stat_scsi_transport_show_attr_device(
890 rcu_read_unlock(); 753 rcu_read_unlock();
891 return ret; 754 return ret;
892} 755}
893DEV_STAT_SCSI_TRANSPORT_ATTR_RO(device);
894 756
895static ssize_t target_stat_scsi_transport_show_attr_indx( 757static ssize_t target_stat_transport_indx_show(struct config_item *item,
896 struct se_port_stat_grps *pgrps, char *page) 758 char *page)
897{ 759{
898 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 760 struct se_lun *lun = to_transport_stat(item);
899 struct se_device *dev; 761 struct se_device *dev;
900 struct se_portal_group *tpg = lun->lun_tpg; 762 struct se_portal_group *tpg = lun->lun_tpg;
901 ssize_t ret = -ENODEV; 763 ssize_t ret = -ENODEV;
@@ -908,12 +770,11 @@ static ssize_t target_stat_scsi_transport_show_attr_indx(
908 rcu_read_unlock(); 770 rcu_read_unlock();
909 return ret; 771 return ret;
910} 772}
911DEV_STAT_SCSI_TRANSPORT_ATTR_RO(indx);
912 773
913static ssize_t target_stat_scsi_transport_show_attr_dev_name( 774static ssize_t target_stat_transport_dev_name_show(struct config_item *item,
914 struct se_port_stat_grps *pgrps, char *page) 775 char *page)
915{ 776{
916 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 777 struct se_lun *lun = to_transport_stat(item);
917 struct se_device *dev; 778 struct se_device *dev;
918 struct se_portal_group *tpg = lun->lun_tpg; 779 struct se_portal_group *tpg = lun->lun_tpg;
919 struct t10_wwn *wwn; 780 struct t10_wwn *wwn;
@@ -932,26 +793,21 @@ static ssize_t target_stat_scsi_transport_show_attr_dev_name(
932 rcu_read_unlock(); 793 rcu_read_unlock();
933 return ret; 794 return ret;
934} 795}
935DEV_STAT_SCSI_TRANSPORT_ATTR_RO(dev_name);
936 796
937CONFIGFS_EATTR_OPS(target_stat_scsi_transport, se_port_stat_grps, 797CONFIGFS_ATTR_RO(target_stat_transport_, inst);
938 scsi_transport_group); 798CONFIGFS_ATTR_RO(target_stat_transport_, device);
799CONFIGFS_ATTR_RO(target_stat_transport_, indx);
800CONFIGFS_ATTR_RO(target_stat_transport_, dev_name);
939 801
940static struct configfs_attribute *target_stat_scsi_transport_attrs[] = { 802static struct configfs_attribute *target_stat_scsi_transport_attrs[] = {
941 &target_stat_scsi_transport_inst.attr, 803 &target_stat_transport_attr_inst,
942 &target_stat_scsi_transport_device.attr, 804 &target_stat_transport_attr_device,
943 &target_stat_scsi_transport_indx.attr, 805 &target_stat_transport_attr_indx,
944 &target_stat_scsi_transport_dev_name.attr, 806 &target_stat_transport_attr_dev_name,
945 NULL, 807 NULL,
946}; 808};
947 809
948static struct configfs_item_operations target_stat_scsi_transport_attrib_ops = {
949 .show_attribute = target_stat_scsi_transport_attr_show,
950 .store_attribute = target_stat_scsi_transport_attr_store,
951};
952
953static struct config_item_type target_stat_scsi_transport_cit = { 810static struct config_item_type target_stat_scsi_transport_cit = {
954 .ct_item_ops = &target_stat_scsi_transport_attrib_ops,
955 .ct_attrs = target_stat_scsi_transport_attrs, 811 .ct_attrs = target_stat_scsi_transport_attrs,
956 .ct_owner = THIS_MODULE, 812 .ct_owner = THIS_MODULE,
957}; 813};
@@ -981,25 +837,17 @@ void target_stat_setup_port_default_groups(struct se_lun *lun)
981 * SCSI Authorized Initiator Table 837 * SCSI Authorized Initiator Table
982 */ 838 */
983 839
984CONFIGFS_EATTR_STRUCT(target_stat_scsi_auth_intr, se_ml_stat_grps); 840static struct se_lun_acl *auth_to_lacl(struct config_item *item)
985#define DEV_STAT_SCSI_AUTH_INTR_ATTR(_name, _mode) \ 841{
986static struct target_stat_scsi_auth_intr_attribute \ 842 struct se_ml_stat_grps *lgrps = container_of(to_config_group(item),
987 target_stat_scsi_auth_intr_##_name = \ 843 struct se_ml_stat_grps, scsi_auth_intr_group);
988 __CONFIGFS_EATTR(_name, _mode, \ 844 return container_of(lgrps, struct se_lun_acl, ml_stat_grps);
989 target_stat_scsi_auth_intr_show_attr_##_name, \ 845}
990 target_stat_scsi_auth_intr_store_attr_##_name); 846
991 847static ssize_t target_stat_auth_inst_show(struct config_item *item,
992#define DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(_name) \ 848 char *page)
993static struct target_stat_scsi_auth_intr_attribute \ 849{
994 target_stat_scsi_auth_intr_##_name = \ 850 struct se_lun_acl *lacl = auth_to_lacl(item);
995 __CONFIGFS_EATTR_RO(_name, \
996 target_stat_scsi_auth_intr_show_attr_##_name);
997
998static ssize_t target_stat_scsi_auth_intr_show_attr_inst(
999 struct se_ml_stat_grps *lgrps, char *page)
1000{
1001 struct se_lun_acl *lacl = container_of(lgrps,
1002 struct se_lun_acl, ml_stat_grps);
1003 struct se_node_acl *nacl = lacl->se_lun_nacl; 851 struct se_node_acl *nacl = lacl->se_lun_nacl;
1004 struct se_dev_entry *deve; 852 struct se_dev_entry *deve;
1005 struct se_portal_group *tpg; 853 struct se_portal_group *tpg;
@@ -1018,13 +866,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_inst(
1018 rcu_read_unlock(); 866 rcu_read_unlock();
1019 return ret; 867 return ret;
1020} 868}
1021DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(inst);
1022 869
1023static ssize_t target_stat_scsi_auth_intr_show_attr_dev( 870static ssize_t target_stat_auth_dev_show(struct config_item *item,
1024 struct se_ml_stat_grps *lgrps, char *page) 871 char *page)
1025{ 872{
1026 struct se_lun_acl *lacl = container_of(lgrps, 873 struct se_lun_acl *lacl = auth_to_lacl(item);
1027 struct se_lun_acl, ml_stat_grps);
1028 struct se_node_acl *nacl = lacl->se_lun_nacl; 874 struct se_node_acl *nacl = lacl->se_lun_nacl;
1029 struct se_dev_entry *deve; 875 struct se_dev_entry *deve;
1030 struct se_lun *lun; 876 struct se_lun *lun;
@@ -1042,13 +888,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_dev(
1042 rcu_read_unlock(); 888 rcu_read_unlock();
1043 return ret; 889 return ret;
1044} 890}
1045DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(dev);
1046 891
1047static ssize_t target_stat_scsi_auth_intr_show_attr_port( 892static ssize_t target_stat_auth_port_show(struct config_item *item,
1048 struct se_ml_stat_grps *lgrps, char *page) 893 char *page)
1049{ 894{
1050 struct se_lun_acl *lacl = container_of(lgrps, 895 struct se_lun_acl *lacl = auth_to_lacl(item);
1051 struct se_lun_acl, ml_stat_grps);
1052 struct se_node_acl *nacl = lacl->se_lun_nacl; 896 struct se_node_acl *nacl = lacl->se_lun_nacl;
1053 struct se_dev_entry *deve; 897 struct se_dev_entry *deve;
1054 struct se_portal_group *tpg; 898 struct se_portal_group *tpg;
@@ -1066,13 +910,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_port(
1066 rcu_read_unlock(); 910 rcu_read_unlock();
1067 return ret; 911 return ret;
1068} 912}
1069DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(port);
1070 913
1071static ssize_t target_stat_scsi_auth_intr_show_attr_indx( 914static ssize_t target_stat_auth_indx_show(struct config_item *item,
1072 struct se_ml_stat_grps *lgrps, char *page) 915 char *page)
1073{ 916{
1074 struct se_lun_acl *lacl = container_of(lgrps, 917 struct se_lun_acl *lacl = auth_to_lacl(item);
1075 struct se_lun_acl, ml_stat_grps);
1076 struct se_node_acl *nacl = lacl->se_lun_nacl; 918 struct se_node_acl *nacl = lacl->se_lun_nacl;
1077 struct se_dev_entry *deve; 919 struct se_dev_entry *deve;
1078 ssize_t ret; 920 ssize_t ret;
@@ -1088,13 +930,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_indx(
1088 rcu_read_unlock(); 930 rcu_read_unlock();
1089 return ret; 931 return ret;
1090} 932}
1091DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(indx);
1092 933
1093static ssize_t target_stat_scsi_auth_intr_show_attr_dev_or_port( 934static ssize_t target_stat_auth_dev_or_port_show(struct config_item *item,
1094 struct se_ml_stat_grps *lgrps, char *page) 935 char *page)
1095{ 936{
1096 struct se_lun_acl *lacl = container_of(lgrps, 937 struct se_lun_acl *lacl = auth_to_lacl(item);
1097 struct se_lun_acl, ml_stat_grps);
1098 struct se_node_acl *nacl = lacl->se_lun_nacl; 938 struct se_node_acl *nacl = lacl->se_lun_nacl;
1099 struct se_dev_entry *deve; 939 struct se_dev_entry *deve;
1100 ssize_t ret; 940 ssize_t ret;
@@ -1110,13 +950,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_dev_or_port(
1110 rcu_read_unlock(); 950 rcu_read_unlock();
1111 return ret; 951 return ret;
1112} 952}
1113DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(dev_or_port);
1114 953
1115static ssize_t target_stat_scsi_auth_intr_show_attr_intr_name( 954static ssize_t target_stat_auth_intr_name_show(struct config_item *item,
1116 struct se_ml_stat_grps *lgrps, char *page) 955 char *page)
1117{ 956{
1118 struct se_lun_acl *lacl = container_of(lgrps, 957 struct se_lun_acl *lacl = auth_to_lacl(item);
1119 struct se_lun_acl, ml_stat_grps);
1120 struct se_node_acl *nacl = lacl->se_lun_nacl; 958 struct se_node_acl *nacl = lacl->se_lun_nacl;
1121 struct se_dev_entry *deve; 959 struct se_dev_entry *deve;
1122 ssize_t ret; 960 ssize_t ret;
@@ -1132,13 +970,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_intr_name(
1132 rcu_read_unlock(); 970 rcu_read_unlock();
1133 return ret; 971 return ret;
1134} 972}
1135DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(intr_name);
1136 973
1137static ssize_t target_stat_scsi_auth_intr_show_attr_map_indx( 974static ssize_t target_stat_auth_map_indx_show(struct config_item *item,
1138 struct se_ml_stat_grps *lgrps, char *page) 975 char *page)
1139{ 976{
1140 struct se_lun_acl *lacl = container_of(lgrps, 977 struct se_lun_acl *lacl = auth_to_lacl(item);
1141 struct se_lun_acl, ml_stat_grps);
1142 struct se_node_acl *nacl = lacl->se_lun_nacl; 978 struct se_node_acl *nacl = lacl->se_lun_nacl;
1143 struct se_dev_entry *deve; 979 struct se_dev_entry *deve;
1144 ssize_t ret; 980 ssize_t ret;
@@ -1154,13 +990,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_map_indx(
1154 rcu_read_unlock(); 990 rcu_read_unlock();
1155 return ret; 991 return ret;
1156} 992}
1157DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(map_indx);
1158 993
1159static ssize_t target_stat_scsi_auth_intr_show_attr_att_count( 994static ssize_t target_stat_auth_att_count_show(struct config_item *item,
1160 struct se_ml_stat_grps *lgrps, char *page) 995 char *page)
1161{ 996{
1162 struct se_lun_acl *lacl = container_of(lgrps, 997 struct se_lun_acl *lacl = auth_to_lacl(item);
1163 struct se_lun_acl, ml_stat_grps);
1164 struct se_node_acl *nacl = lacl->se_lun_nacl; 998 struct se_node_acl *nacl = lacl->se_lun_nacl;
1165 struct se_dev_entry *deve; 999 struct se_dev_entry *deve;
1166 ssize_t ret; 1000 ssize_t ret;
@@ -1176,13 +1010,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_att_count(
1176 rcu_read_unlock(); 1010 rcu_read_unlock();
1177 return ret; 1011 return ret;
1178} 1012}
1179DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(att_count);
1180 1013
1181static ssize_t target_stat_scsi_auth_intr_show_attr_num_cmds( 1014static ssize_t target_stat_auth_num_cmds_show(struct config_item *item,
1182 struct se_ml_stat_grps *lgrps, char *page) 1015 char *page)
1183{ 1016{
1184 struct se_lun_acl *lacl = container_of(lgrps, 1017 struct se_lun_acl *lacl = auth_to_lacl(item);
1185 struct se_lun_acl, ml_stat_grps);
1186 struct se_node_acl *nacl = lacl->se_lun_nacl; 1018 struct se_node_acl *nacl = lacl->se_lun_nacl;
1187 struct se_dev_entry *deve; 1019 struct se_dev_entry *deve;
1188 ssize_t ret; 1020 ssize_t ret;
@@ -1199,13 +1031,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_num_cmds(
1199 rcu_read_unlock(); 1031 rcu_read_unlock();
1200 return ret; 1032 return ret;
1201} 1033}
1202DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(num_cmds);
1203 1034
1204static ssize_t target_stat_scsi_auth_intr_show_attr_read_mbytes( 1035static ssize_t target_stat_auth_read_mbytes_show(struct config_item *item,
1205 struct se_ml_stat_grps *lgrps, char *page) 1036 char *page)
1206{ 1037{
1207 struct se_lun_acl *lacl = container_of(lgrps, 1038 struct se_lun_acl *lacl = auth_to_lacl(item);
1208 struct se_lun_acl, ml_stat_grps);
1209 struct se_node_acl *nacl = lacl->se_lun_nacl; 1039 struct se_node_acl *nacl = lacl->se_lun_nacl;
1210 struct se_dev_entry *deve; 1040 struct se_dev_entry *deve;
1211 ssize_t ret; 1041 ssize_t ret;
@@ -1222,13 +1052,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_read_mbytes(
1222 rcu_read_unlock(); 1052 rcu_read_unlock();
1223 return ret; 1053 return ret;
1224} 1054}
1225DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(read_mbytes);
1226 1055
1227static ssize_t target_stat_scsi_auth_intr_show_attr_write_mbytes( 1056static ssize_t target_stat_auth_write_mbytes_show(struct config_item *item,
1228 struct se_ml_stat_grps *lgrps, char *page) 1057 char *page)
1229{ 1058{
1230 struct se_lun_acl *lacl = container_of(lgrps, 1059 struct se_lun_acl *lacl = auth_to_lacl(item);
1231 struct se_lun_acl, ml_stat_grps);
1232 struct se_node_acl *nacl = lacl->se_lun_nacl; 1060 struct se_node_acl *nacl = lacl->se_lun_nacl;
1233 struct se_dev_entry *deve; 1061 struct se_dev_entry *deve;
1234 ssize_t ret; 1062 ssize_t ret;
@@ -1245,13 +1073,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_write_mbytes(
1245 rcu_read_unlock(); 1073 rcu_read_unlock();
1246 return ret; 1074 return ret;
1247} 1075}
1248DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(write_mbytes);
1249 1076
1250static ssize_t target_stat_scsi_auth_intr_show_attr_hs_num_cmds( 1077static ssize_t target_stat_auth_hs_num_cmds_show(struct config_item *item,
1251 struct se_ml_stat_grps *lgrps, char *page) 1078 char *page)
1252{ 1079{
1253 struct se_lun_acl *lacl = container_of(lgrps, 1080 struct se_lun_acl *lacl = auth_to_lacl(item);
1254 struct se_lun_acl, ml_stat_grps);
1255 struct se_node_acl *nacl = lacl->se_lun_nacl; 1081 struct se_node_acl *nacl = lacl->se_lun_nacl;
1256 struct se_dev_entry *deve; 1082 struct se_dev_entry *deve;
1257 ssize_t ret; 1083 ssize_t ret;
@@ -1267,13 +1093,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_hs_num_cmds(
1267 rcu_read_unlock(); 1093 rcu_read_unlock();
1268 return ret; 1094 return ret;
1269} 1095}
1270DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(hs_num_cmds);
1271 1096
1272static ssize_t target_stat_scsi_auth_intr_show_attr_creation_time( 1097static ssize_t target_stat_auth_creation_time_show(struct config_item *item,
1273 struct se_ml_stat_grps *lgrps, char *page) 1098 char *page)
1274{ 1099{
1275 struct se_lun_acl *lacl = container_of(lgrps, 1100 struct se_lun_acl *lacl = auth_to_lacl(item);
1276 struct se_lun_acl, ml_stat_grps);
1277 struct se_node_acl *nacl = lacl->se_lun_nacl; 1101 struct se_node_acl *nacl = lacl->se_lun_nacl;
1278 struct se_dev_entry *deve; 1102 struct se_dev_entry *deve;
1279 ssize_t ret; 1103 ssize_t ret;
@@ -1290,13 +1114,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_creation_time(
1290 rcu_read_unlock(); 1114 rcu_read_unlock();
1291 return ret; 1115 return ret;
1292} 1116}
1293DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(creation_time);
1294 1117
1295static ssize_t target_stat_scsi_auth_intr_show_attr_row_status( 1118static ssize_t target_stat_auth_row_status_show(struct config_item *item,
1296 struct se_ml_stat_grps *lgrps, char *page) 1119 char *page)
1297{ 1120{
1298 struct se_lun_acl *lacl = container_of(lgrps, 1121 struct se_lun_acl *lacl = auth_to_lacl(item);
1299 struct se_lun_acl, ml_stat_grps);
1300 struct se_node_acl *nacl = lacl->se_lun_nacl; 1122 struct se_node_acl *nacl = lacl->se_lun_nacl;
1301 struct se_dev_entry *deve; 1123 struct se_dev_entry *deve;
1302 ssize_t ret; 1124 ssize_t ret;
@@ -1312,36 +1134,41 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_row_status(
1312 rcu_read_unlock(); 1134 rcu_read_unlock();
1313 return ret; 1135 return ret;
1314} 1136}
1315DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(row_status);
1316 1137
1317CONFIGFS_EATTR_OPS(target_stat_scsi_auth_intr, se_ml_stat_grps, 1138CONFIGFS_ATTR_RO(target_stat_auth_, inst);
1318 scsi_auth_intr_group); 1139CONFIGFS_ATTR_RO(target_stat_auth_, dev);
1140CONFIGFS_ATTR_RO(target_stat_auth_, port);
1141CONFIGFS_ATTR_RO(target_stat_auth_, indx);
1142CONFIGFS_ATTR_RO(target_stat_auth_, dev_or_port);
1143CONFIGFS_ATTR_RO(target_stat_auth_, intr_name);
1144CONFIGFS_ATTR_RO(target_stat_auth_, map_indx);
1145CONFIGFS_ATTR_RO(target_stat_auth_, att_count);
1146CONFIGFS_ATTR_RO(target_stat_auth_, num_cmds);
1147CONFIGFS_ATTR_RO(target_stat_auth_, read_mbytes);
1148CONFIGFS_ATTR_RO(target_stat_auth_, write_mbytes);
1149CONFIGFS_ATTR_RO(target_stat_auth_, hs_num_cmds);
1150CONFIGFS_ATTR_RO(target_stat_auth_, creation_time);
1151CONFIGFS_ATTR_RO(target_stat_auth_, row_status);
1319 1152
1320static struct configfs_attribute *target_stat_scsi_auth_intr_attrs[] = { 1153static struct configfs_attribute *target_stat_scsi_auth_intr_attrs[] = {
1321 &target_stat_scsi_auth_intr_inst.attr, 1154 &target_stat_auth_attr_inst,
1322 &target_stat_scsi_auth_intr_dev.attr, 1155 &target_stat_auth_attr_dev,
1323 &target_stat_scsi_auth_intr_port.attr, 1156 &target_stat_auth_attr_port,
1324 &target_stat_scsi_auth_intr_indx.attr, 1157 &target_stat_auth_attr_indx,
1325 &target_stat_scsi_auth_intr_dev_or_port.attr, 1158 &target_stat_auth_attr_dev_or_port,
1326 &target_stat_scsi_auth_intr_intr_name.attr, 1159 &target_stat_auth_attr_intr_name,
1327 &target_stat_scsi_auth_intr_map_indx.attr, 1160 &target_stat_auth_attr_map_indx,
1328 &target_stat_scsi_auth_intr_att_count.attr, 1161 &target_stat_auth_attr_att_count,
1329 &target_stat_scsi_auth_intr_num_cmds.attr, 1162 &target_stat_auth_attr_num_cmds,
1330 &target_stat_scsi_auth_intr_read_mbytes.attr, 1163 &target_stat_auth_attr_read_mbytes,
1331 &target_stat_scsi_auth_intr_write_mbytes.attr, 1164 &target_stat_auth_attr_write_mbytes,
1332 &target_stat_scsi_auth_intr_hs_num_cmds.attr, 1165 &target_stat_auth_attr_hs_num_cmds,
1333 &target_stat_scsi_auth_intr_creation_time.attr, 1166 &target_stat_auth_attr_creation_time,
1334 &target_stat_scsi_auth_intr_row_status.attr, 1167 &target_stat_auth_attr_row_status,
1335 NULL, 1168 NULL,
1336}; 1169};
1337 1170
1338static struct configfs_item_operations target_stat_scsi_auth_intr_attrib_ops = {
1339 .show_attribute = target_stat_scsi_auth_intr_attr_show,
1340 .store_attribute = target_stat_scsi_auth_intr_attr_store,
1341};
1342
1343static struct config_item_type target_stat_scsi_auth_intr_cit = { 1171static struct config_item_type target_stat_scsi_auth_intr_cit = {
1344 .ct_item_ops = &target_stat_scsi_auth_intr_attrib_ops,
1345 .ct_attrs = target_stat_scsi_auth_intr_attrs, 1172 .ct_attrs = target_stat_scsi_auth_intr_attrs,
1346 .ct_owner = THIS_MODULE, 1173 .ct_owner = THIS_MODULE,
1347}; 1174};
@@ -1350,25 +1177,17 @@ static struct config_item_type target_stat_scsi_auth_intr_cit = {
1350 * SCSI Attached Initiator Port Table 1177 * SCSI Attached Initiator Port Table
1351 */ 1178 */
1352 1179
1353CONFIGFS_EATTR_STRUCT(target_stat_scsi_att_intr_port, se_ml_stat_grps); 1180static struct se_lun_acl *iport_to_lacl(struct config_item *item)
1354#define DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR(_name, _mode) \ 1181{
1355static struct target_stat_scsi_att_intr_port_attribute \ 1182 struct se_ml_stat_grps *lgrps = container_of(to_config_group(item),
1356 target_stat_scsi_att_intr_port_##_name = \ 1183 struct se_ml_stat_grps, scsi_att_intr_port_group);
1357 __CONFIGFS_EATTR(_name, _mode, \ 1184 return container_of(lgrps, struct se_lun_acl, ml_stat_grps);
1358 target_stat_scsi_att_intr_port_show_attr_##_name, \ 1185}
1359 target_stat_scsi_att_intr_port_store_attr_##_name); 1186
1360 1187static ssize_t target_stat_iport_inst_show(struct config_item *item,
1361#define DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(_name) \ 1188 char *page)
1362static struct target_stat_scsi_att_intr_port_attribute \ 1189{
1363 target_stat_scsi_att_intr_port_##_name = \ 1190 struct se_lun_acl *lacl = iport_to_lacl(item);
1364 __CONFIGFS_EATTR_RO(_name, \
1365 target_stat_scsi_att_intr_port_show_attr_##_name);
1366
1367static ssize_t target_stat_scsi_att_intr_port_show_attr_inst(
1368 struct se_ml_stat_grps *lgrps, char *page)
1369{
1370 struct se_lun_acl *lacl = container_of(lgrps,
1371 struct se_lun_acl, ml_stat_grps);
1372 struct se_node_acl *nacl = lacl->se_lun_nacl; 1191 struct se_node_acl *nacl = lacl->se_lun_nacl;
1373 struct se_dev_entry *deve; 1192 struct se_dev_entry *deve;
1374 struct se_portal_group *tpg; 1193 struct se_portal_group *tpg;
@@ -1387,13 +1206,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_inst(
1387 rcu_read_unlock(); 1206 rcu_read_unlock();
1388 return ret; 1207 return ret;
1389} 1208}
1390DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(inst);
1391 1209
1392static ssize_t target_stat_scsi_att_intr_port_show_attr_dev( 1210static ssize_t target_stat_iport_dev_show(struct config_item *item,
1393 struct se_ml_stat_grps *lgrps, char *page) 1211 char *page)
1394{ 1212{
1395 struct se_lun_acl *lacl = container_of(lgrps, 1213 struct se_lun_acl *lacl = iport_to_lacl(item);
1396 struct se_lun_acl, ml_stat_grps);
1397 struct se_node_acl *nacl = lacl->se_lun_nacl; 1214 struct se_node_acl *nacl = lacl->se_lun_nacl;
1398 struct se_dev_entry *deve; 1215 struct se_dev_entry *deve;
1399 struct se_lun *lun; 1216 struct se_lun *lun;
@@ -1411,13 +1228,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_dev(
1411 rcu_read_unlock(); 1228 rcu_read_unlock();
1412 return ret; 1229 return ret;
1413} 1230}
1414DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(dev);
1415 1231
1416static ssize_t target_stat_scsi_att_intr_port_show_attr_port( 1232static ssize_t target_stat_iport_port_show(struct config_item *item,
1417 struct se_ml_stat_grps *lgrps, char *page) 1233 char *page)
1418{ 1234{
1419 struct se_lun_acl *lacl = container_of(lgrps, 1235 struct se_lun_acl *lacl = iport_to_lacl(item);
1420 struct se_lun_acl, ml_stat_grps);
1421 struct se_node_acl *nacl = lacl->se_lun_nacl; 1236 struct se_node_acl *nacl = lacl->se_lun_nacl;
1422 struct se_dev_entry *deve; 1237 struct se_dev_entry *deve;
1423 struct se_portal_group *tpg; 1238 struct se_portal_group *tpg;
@@ -1435,13 +1250,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port(
1435 rcu_read_unlock(); 1250 rcu_read_unlock();
1436 return ret; 1251 return ret;
1437} 1252}
1438DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(port);
1439 1253
1440static ssize_t target_stat_scsi_att_intr_port_show_attr_indx( 1254static ssize_t target_stat_iport_indx_show(struct config_item *item,
1441 struct se_ml_stat_grps *lgrps, char *page) 1255 char *page)
1442{ 1256{
1443 struct se_lun_acl *lacl = container_of(lgrps, 1257 struct se_lun_acl *lacl = iport_to_lacl(item);
1444 struct se_lun_acl, ml_stat_grps);
1445 struct se_node_acl *nacl = lacl->se_lun_nacl; 1258 struct se_node_acl *nacl = lacl->se_lun_nacl;
1446 struct se_session *se_sess; 1259 struct se_session *se_sess;
1447 struct se_portal_group *tpg; 1260 struct se_portal_group *tpg;
@@ -1461,13 +1274,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_indx(
1461 spin_unlock_irq(&nacl->nacl_sess_lock); 1274 spin_unlock_irq(&nacl->nacl_sess_lock);
1462 return ret; 1275 return ret;
1463} 1276}
1464DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(indx);
1465 1277
1466static ssize_t target_stat_scsi_att_intr_port_show_attr_port_auth_indx( 1278static ssize_t target_stat_iport_port_auth_indx_show(struct config_item *item,
1467 struct se_ml_stat_grps *lgrps, char *page) 1279 char *page)
1468{ 1280{
1469 struct se_lun_acl *lacl = container_of(lgrps, 1281 struct se_lun_acl *lacl = iport_to_lacl(item);
1470 struct se_lun_acl, ml_stat_grps);
1471 struct se_node_acl *nacl = lacl->se_lun_nacl; 1282 struct se_node_acl *nacl = lacl->se_lun_nacl;
1472 struct se_dev_entry *deve; 1283 struct se_dev_entry *deve;
1473 ssize_t ret; 1284 ssize_t ret;
@@ -1483,13 +1294,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port_auth_indx(
1483 rcu_read_unlock(); 1294 rcu_read_unlock();
1484 return ret; 1295 return ret;
1485} 1296}
1486DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(port_auth_indx);
1487 1297
1488static ssize_t target_stat_scsi_att_intr_port_show_attr_port_ident( 1298static ssize_t target_stat_iport_port_ident_show(struct config_item *item,
1489 struct se_ml_stat_grps *lgrps, char *page) 1299 char *page)
1490{ 1300{
1491 struct se_lun_acl *lacl = container_of(lgrps, 1301 struct se_lun_acl *lacl = iport_to_lacl(item);
1492 struct se_lun_acl, ml_stat_grps);
1493 struct se_node_acl *nacl = lacl->se_lun_nacl; 1302 struct se_node_acl *nacl = lacl->se_lun_nacl;
1494 struct se_session *se_sess; 1303 struct se_session *se_sess;
1495 struct se_portal_group *tpg; 1304 struct se_portal_group *tpg;
@@ -1513,28 +1322,25 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port_ident(
1513 spin_unlock_irq(&nacl->nacl_sess_lock); 1322 spin_unlock_irq(&nacl->nacl_sess_lock);
1514 return ret; 1323 return ret;
1515} 1324}
1516DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(port_ident);
1517 1325
1518CONFIGFS_EATTR_OPS(target_stat_scsi_att_intr_port, se_ml_stat_grps, 1326CONFIGFS_ATTR_RO(target_stat_iport_, inst);
1519 scsi_att_intr_port_group); 1327CONFIGFS_ATTR_RO(target_stat_iport_, dev);
1328CONFIGFS_ATTR_RO(target_stat_iport_, port);
1329CONFIGFS_ATTR_RO(target_stat_iport_, indx);
1330CONFIGFS_ATTR_RO(target_stat_iport_, port_auth_indx);
1331CONFIGFS_ATTR_RO(target_stat_iport_, port_ident);
1520 1332
1521static struct configfs_attribute *target_stat_scsi_ath_intr_port_attrs[] = { 1333static struct configfs_attribute *target_stat_scsi_ath_intr_port_attrs[] = {
1522 &target_stat_scsi_att_intr_port_inst.attr, 1334 &target_stat_iport_attr_inst,
1523 &target_stat_scsi_att_intr_port_dev.attr, 1335 &target_stat_iport_attr_dev,
1524 &target_stat_scsi_att_intr_port_port.attr, 1336 &target_stat_iport_attr_port,
1525 &target_stat_scsi_att_intr_port_indx.attr, 1337 &target_stat_iport_attr_indx,
1526 &target_stat_scsi_att_intr_port_port_auth_indx.attr, 1338 &target_stat_iport_attr_port_auth_indx,
1527 &target_stat_scsi_att_intr_port_port_ident.attr, 1339 &target_stat_iport_attr_port_ident,
1528 NULL, 1340 NULL,
1529}; 1341};
1530 1342
1531static struct configfs_item_operations target_stat_scsi_att_intr_port_attrib_ops = {
1532 .show_attribute = target_stat_scsi_att_intr_port_attr_show,
1533 .store_attribute = target_stat_scsi_att_intr_port_attr_store,
1534};
1535
1536static struct config_item_type target_stat_scsi_att_intr_port_cit = { 1343static struct config_item_type target_stat_scsi_att_intr_port_cit = {
1537 .ct_item_ops = &target_stat_scsi_att_intr_port_attrib_ops,
1538 .ct_attrs = target_stat_scsi_ath_intr_port_attrs, 1344 .ct_attrs = target_stat_scsi_ath_intr_port_attrs,
1539 .ct_owner = THIS_MODULE, 1345 .ct_owner = THIS_MODULE,
1540}; 1346};
diff --git a/drivers/target/tcm_fc/tfc_cmd.c b/drivers/target/tcm_fc/tfc_cmd.c
index aa3caca8bace..064d6dfb5b6d 100644
--- a/drivers/target/tcm_fc/tfc_cmd.c
+++ b/drivers/target/tcm_fc/tfc_cmd.c
@@ -36,7 +36,6 @@
36 36
37#include <target/target_core_base.h> 37#include <target/target_core_base.h>
38#include <target/target_core_fabric.h> 38#include <target/target_core_fabric.h>
39#include <target/configfs_macros.h>
40 39
41#include "tcm_fc.h" 40#include "tcm_fc.h"
42 41
diff --git a/drivers/target/tcm_fc/tfc_conf.c b/drivers/target/tcm_fc/tfc_conf.c
index 16670933013b..85aeaa0ad303 100644
--- a/drivers/target/tcm_fc/tfc_conf.c
+++ b/drivers/target/tcm_fc/tfc_conf.c
@@ -38,8 +38,6 @@
38 38
39#include <target/target_core_base.h> 39#include <target/target_core_base.h>
40#include <target/target_core_fabric.h> 40#include <target/target_core_fabric.h>
41#include <target/target_core_fabric_configfs.h>
42#include <target/configfs_macros.h>
43 41
44#include "tcm_fc.h" 42#include "tcm_fc.h"
45 43
@@ -131,55 +129,51 @@ static ssize_t ft_wwn_store(void *arg, const char *buf, size_t len)
131 * ACL auth ops. 129 * ACL auth ops.
132 */ 130 */
133 131
134static ssize_t ft_nacl_show_port_name( 132static ssize_t ft_nacl_port_name_show(struct config_item *item, char *page)
135 struct se_node_acl *se_nacl,
136 char *page)
137{ 133{
134 struct se_node_acl *se_nacl = acl_to_nacl(item);
138 struct ft_node_acl *acl = container_of(se_nacl, 135 struct ft_node_acl *acl = container_of(se_nacl,
139 struct ft_node_acl, se_node_acl); 136 struct ft_node_acl, se_node_acl);
140 137
141 return ft_wwn_show(&acl->node_auth.port_name, page); 138 return ft_wwn_show(&acl->node_auth.port_name, page);
142} 139}
143 140
144static ssize_t ft_nacl_store_port_name( 141static ssize_t ft_nacl_port_name_store(struct config_item *item,
145 struct se_node_acl *se_nacl, 142 const char *page, size_t count)
146 const char *page,
147 size_t count)
148{ 143{
144 struct se_node_acl *se_nacl = acl_to_nacl(item);
149 struct ft_node_acl *acl = container_of(se_nacl, 145 struct ft_node_acl *acl = container_of(se_nacl,
150 struct ft_node_acl, se_node_acl); 146 struct ft_node_acl, se_node_acl);
151 147
152 return ft_wwn_store(&acl->node_auth.port_name, page, count); 148 return ft_wwn_store(&acl->node_auth.port_name, page, count);
153} 149}
154 150
155TF_NACL_BASE_ATTR(ft, port_name, S_IRUGO | S_IWUSR); 151static ssize_t ft_nacl_node_name_show(struct config_item *item,
156 152 char *page)
157static ssize_t ft_nacl_show_node_name(
158 struct se_node_acl *se_nacl,
159 char *page)
160{ 153{
154 struct se_node_acl *se_nacl = acl_to_nacl(item);
161 struct ft_node_acl *acl = container_of(se_nacl, 155 struct ft_node_acl *acl = container_of(se_nacl,
162 struct ft_node_acl, se_node_acl); 156 struct ft_node_acl, se_node_acl);
163 157
164 return ft_wwn_show(&acl->node_auth.node_name, page); 158 return ft_wwn_show(&acl->node_auth.node_name, page);
165} 159}
166 160
167static ssize_t ft_nacl_store_node_name( 161static ssize_t ft_nacl_node_name_store(struct config_item *item,
168 struct se_node_acl *se_nacl, 162 const char *page, size_t count)
169 const char *page,
170 size_t count)
171{ 163{
164 struct se_node_acl *se_nacl = acl_to_nacl(item);
172 struct ft_node_acl *acl = container_of(se_nacl, 165 struct ft_node_acl *acl = container_of(se_nacl,
173 struct ft_node_acl, se_node_acl); 166 struct ft_node_acl, se_node_acl);
174 167
175 return ft_wwn_store(&acl->node_auth.node_name, page, count); 168 return ft_wwn_store(&acl->node_auth.node_name, page, count);
176} 169}
177 170
178TF_NACL_BASE_ATTR(ft, node_name, S_IRUGO | S_IWUSR); 171CONFIGFS_ATTR(ft_nacl_, node_name);
172CONFIGFS_ATTR(ft_nacl_, port_name);
179 173
180static struct configfs_attribute *ft_nacl_base_attrs[] = { 174static struct configfs_attribute *ft_nacl_base_attrs[] = {
181 &ft_nacl_port_name.attr, 175 &ft_nacl_attr_port_name,
182 &ft_nacl_node_name.attr, 176 &ft_nacl_attr_node_name,
183 NULL, 177 NULL,
184}; 178};
185 179
@@ -386,18 +380,16 @@ static void ft_del_wwn(struct se_wwn *wwn)
386 kfree(ft_wwn); 380 kfree(ft_wwn);
387} 381}
388 382
389static ssize_t ft_wwn_show_attr_version( 383static ssize_t ft_wwn_version_show(struct config_item *item, char *page)
390 struct target_fabric_configfs *tf,
391 char *page)
392{ 384{
393 return sprintf(page, "TCM FC " FT_VERSION " on %s/%s on " 385 return sprintf(page, "TCM FC " FT_VERSION " on %s/%s on "
394 ""UTS_RELEASE"\n", utsname()->sysname, utsname()->machine); 386 ""UTS_RELEASE"\n", utsname()->sysname, utsname()->machine);
395} 387}
396 388
397TF_WWN_ATTR_RO(ft, version); 389CONFIGFS_ATTR_RO(ft_wwn_, version);
398 390
399static struct configfs_attribute *ft_wwn_attrs[] = { 391static struct configfs_attribute *ft_wwn_attrs[] = {
400 &ft_wwn_version.attr, 392 &ft_wwn_attr_version,
401 NULL, 393 NULL,
402}; 394};
403 395
diff --git a/drivers/target/tcm_fc/tfc_io.c b/drivers/target/tcm_fc/tfc_io.c
index 4b0fedd6bd4b..847c1aa6fbf4 100644
--- a/drivers/target/tcm_fc/tfc_io.c
+++ b/drivers/target/tcm_fc/tfc_io.c
@@ -44,7 +44,6 @@
44 44
45#include <target/target_core_base.h> 45#include <target/target_core_base.h>
46#include <target/target_core_fabric.h> 46#include <target/target_core_fabric.h>
47#include <target/configfs_macros.h>
48 47
49#include "tcm_fc.h" 48#include "tcm_fc.h"
50 49
diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c
index 31a9e3fb98c5..7b934eac995d 100644
--- a/drivers/target/tcm_fc/tfc_sess.c
+++ b/drivers/target/tcm_fc/tfc_sess.c
@@ -36,7 +36,6 @@
36 36
37#include <target/target_core_base.h> 37#include <target/target_core_base.h>
38#include <target/target_core_fabric.h> 38#include <target/target_core_fabric.h>
39#include <target/configfs_macros.h>
40 39
41#include "tcm_fc.h" 40#include "tcm_fc.h"
42 41
diff --git a/drivers/usb/gadget/legacy/tcm_usb_gadget.c b/drivers/usb/gadget/legacy/tcm_usb_gadget.c
index c3c48088fced..33833fe2e163 100644
--- a/drivers/usb/gadget/legacy/tcm_usb_gadget.c
+++ b/drivers/usb/gadget/legacy/tcm_usb_gadget.c
@@ -19,8 +19,6 @@
19#include <scsi/scsi_tcq.h> 19#include <scsi/scsi_tcq.h>
20#include <target/target_core_base.h> 20#include <target/target_core_base.h>
21#include <target/target_core_fabric.h> 21#include <target/target_core_fabric.h>
22#include <target/target_core_fabric_configfs.h>
23#include <target/configfs_macros.h>
24#include <asm/unaligned.h> 22#include <asm/unaligned.h>
25 23
26#include "tcm_usb_gadget.h" 24#include "tcm_usb_gadget.h"
@@ -1467,23 +1465,21 @@ static void usbg_drop_tport(struct se_wwn *wwn)
1467/* 1465/*
1468 * If somebody feels like dropping the version property, go ahead. 1466 * If somebody feels like dropping the version property, go ahead.
1469 */ 1467 */
1470static ssize_t usbg_wwn_show_attr_version( 1468static ssize_t usbg_wwn_version_show(struct config_item *item, char *page)
1471 struct target_fabric_configfs *tf,
1472 char *page)
1473{ 1469{
1474 return sprintf(page, "usb-gadget fabric module\n"); 1470 return sprintf(page, "usb-gadget fabric module\n");
1475} 1471}
1476TF_WWN_ATTR_RO(usbg, version); 1472
1473CONFIGFS_ATTR_RO(usbg_wwn_, version);
1477 1474
1478static struct configfs_attribute *usbg_wwn_attrs[] = { 1475static struct configfs_attribute *usbg_wwn_attrs[] = {
1479 &usbg_wwn_version.attr, 1476 &usbg_wwn_attr_version,
1480 NULL, 1477 NULL,
1481}; 1478};
1482 1479
1483static ssize_t tcm_usbg_tpg_show_enable( 1480static ssize_t tcm_usbg_tpg_enable_show(struct config_item *item, char *page)
1484 struct se_portal_group *se_tpg,
1485 char *page)
1486{ 1481{
1482 struct se_portal_group *se_tpg = to_tpg(item);
1487 struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg); 1483 struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1488 1484
1489 return snprintf(page, PAGE_SIZE, "%u\n", tpg->gadget_connect); 1485 return snprintf(page, PAGE_SIZE, "%u\n", tpg->gadget_connect);
@@ -1492,11 +1488,10 @@ static ssize_t tcm_usbg_tpg_show_enable(
1492static int usbg_attach(struct usbg_tpg *); 1488static int usbg_attach(struct usbg_tpg *);
1493static void usbg_detach(struct usbg_tpg *); 1489static void usbg_detach(struct usbg_tpg *);
1494 1490
1495static ssize_t tcm_usbg_tpg_store_enable( 1491static ssize_t tcm_usbg_tpg_enable_store(struct config_item *item,
1496 struct se_portal_group *se_tpg, 1492 const char *page, size_t count)
1497 const char *page,
1498 size_t count)
1499{ 1493{
1494 struct se_portal_group *se_tpg = to_tpg(item);
1500 struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg); 1495 struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1501 unsigned long op; 1496 unsigned long op;
1502 ssize_t ret; 1497 ssize_t ret;
@@ -1523,12 +1518,10 @@ static ssize_t tcm_usbg_tpg_store_enable(
1523out: 1518out:
1524 return count; 1519 return count;
1525} 1520}
1526TF_TPG_BASE_ATTR(tcm_usbg, enable, S_IRUGO | S_IWUSR);
1527 1521
1528static ssize_t tcm_usbg_tpg_show_nexus( 1522static ssize_t tcm_usbg_tpg_nexus_show(struct config_item *item, char *page)
1529 struct se_portal_group *se_tpg,
1530 char *page)
1531{ 1523{
1524 struct se_portal_group *se_tpg = to_tpg(item);
1532 struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg); 1525 struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1533 struct tcm_usbg_nexus *tv_nexus; 1526 struct tcm_usbg_nexus *tv_nexus;
1534 ssize_t ret; 1527 ssize_t ret;
@@ -1636,11 +1629,10 @@ out:
1636 return ret; 1629 return ret;
1637} 1630}
1638 1631
1639static ssize_t tcm_usbg_tpg_store_nexus( 1632static ssize_t tcm_usbg_tpg_nexus_store(struct config_item *item,
1640 struct se_portal_group *se_tpg, 1633 const char *page, size_t count)
1641 const char *page,
1642 size_t count)
1643{ 1634{
1635 struct se_portal_group *se_tpg = to_tpg(item);
1644 struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg); 1636 struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1645 unsigned char i_port[USBG_NAMELEN], *ptr; 1637 unsigned char i_port[USBG_NAMELEN], *ptr;
1646 int ret; 1638 int ret;
@@ -1670,11 +1662,13 @@ static ssize_t tcm_usbg_tpg_store_nexus(
1670 return ret; 1662 return ret;
1671 return count; 1663 return count;
1672} 1664}
1673TF_TPG_BASE_ATTR(tcm_usbg, nexus, S_IRUGO | S_IWUSR); 1665
1666CONFIGFS_ATTR(tcm_usbg_tpg_, enable);
1667CONFIGFS_ATTR(tcm_usbg_tpg_, nexus);
1674 1668
1675static struct configfs_attribute *usbg_base_attrs[] = { 1669static struct configfs_attribute *usbg_base_attrs[] = {
1676 &tcm_usbg_tpg_enable.attr, 1670 &tcm_usbg_tpg_attr_enable,
1677 &tcm_usbg_tpg_nexus.attr, 1671 &tcm_usbg_tpg_attr_nexus,
1678 NULL, 1672 NULL,
1679}; 1673};
1680 1674
diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
index f114a9dbb48f..a971765eb9f2 100644
--- a/drivers/vhost/scsi.c
+++ b/drivers/vhost/scsi.c
@@ -42,8 +42,6 @@
42#include <scsi/scsi_proto.h> 42#include <scsi/scsi_proto.h>
43#include <target/target_core_base.h> 43#include <target/target_core_base.h>
44#include <target/target_core_fabric.h> 44#include <target/target_core_fabric.h>
45#include <target/target_core_fabric_configfs.h>
46#include <target/configfs_macros.h>
47#include <linux/vhost.h> 45#include <linux/vhost.h>
48#include <linux/virtio_scsi.h> 46#include <linux/virtio_scsi.h>
49#include <linux/llist.h> 47#include <linux/llist.h>
@@ -1686,11 +1684,10 @@ static void vhost_scsi_free_cmd_map_res(struct vhost_scsi_nexus *nexus,
1686 } 1684 }
1687} 1685}
1688 1686
1689static ssize_t vhost_scsi_tpg_attrib_store_fabric_prot_type( 1687static ssize_t vhost_scsi_tpg_attrib_fabric_prot_type_store(
1690 struct se_portal_group *se_tpg, 1688 struct config_item *item, const char *page, size_t count)
1691 const char *page,
1692 size_t count)
1693{ 1689{
1690 struct se_portal_group *se_tpg = attrib_to_tpg(item);
1694 struct vhost_scsi_tpg *tpg = container_of(se_tpg, 1691 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
1695 struct vhost_scsi_tpg, se_tpg); 1692 struct vhost_scsi_tpg, se_tpg);
1696 unsigned long val; 1693 unsigned long val;
@@ -1709,19 +1706,20 @@ static ssize_t vhost_scsi_tpg_attrib_store_fabric_prot_type(
1709 return count; 1706 return count;
1710} 1707}
1711 1708
1712static ssize_t vhost_scsi_tpg_attrib_show_fabric_prot_type( 1709static ssize_t vhost_scsi_tpg_attrib_fabric_prot_type_show(
1713 struct se_portal_group *se_tpg, 1710 struct config_item *item, char *page)
1714 char *page)
1715{ 1711{
1712 struct se_portal_group *se_tpg = attrib_to_tpg(item);
1716 struct vhost_scsi_tpg *tpg = container_of(se_tpg, 1713 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
1717 struct vhost_scsi_tpg, se_tpg); 1714 struct vhost_scsi_tpg, se_tpg);
1718 1715
1719 return sprintf(page, "%d\n", tpg->tv_fabric_prot_type); 1716 return sprintf(page, "%d\n", tpg->tv_fabric_prot_type);
1720} 1717}
1721TF_TPG_ATTRIB_ATTR(vhost_scsi, fabric_prot_type, S_IRUGO | S_IWUSR); 1718
1719CONFIGFS_ATTR(vhost_scsi_tpg_attrib_, fabric_prot_type);
1722 1720
1723static struct configfs_attribute *vhost_scsi_tpg_attrib_attrs[] = { 1721static struct configfs_attribute *vhost_scsi_tpg_attrib_attrs[] = {
1724 &vhost_scsi_tpg_attrib_fabric_prot_type.attr, 1722 &vhost_scsi_tpg_attrib_attr_fabric_prot_type,
1725 NULL, 1723 NULL,
1726}; 1724};
1727 1725
@@ -1869,9 +1867,9 @@ static int vhost_scsi_drop_nexus(struct vhost_scsi_tpg *tpg)
1869 return 0; 1867 return 0;
1870} 1868}
1871 1869
1872static ssize_t vhost_scsi_tpg_show_nexus(struct se_portal_group *se_tpg, 1870static ssize_t vhost_scsi_tpg_nexus_show(struct config_item *item, char *page)
1873 char *page)
1874{ 1871{
1872 struct se_portal_group *se_tpg = to_tpg(item);
1875 struct vhost_scsi_tpg *tpg = container_of(se_tpg, 1873 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
1876 struct vhost_scsi_tpg, se_tpg); 1874 struct vhost_scsi_tpg, se_tpg);
1877 struct vhost_scsi_nexus *tv_nexus; 1875 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 return ret; 1888 return ret;
1891} 1889}
1892 1890
1893static ssize_t vhost_scsi_tpg_store_nexus(struct se_portal_group *se_tpg, 1891static ssize_t vhost_scsi_tpg_nexus_store(struct config_item *item,
1894 const char *page, 1892 const char *page, size_t count)
1895 size_t count)
1896{ 1893{
1894 struct se_portal_group *se_tpg = to_tpg(item);
1897 struct vhost_scsi_tpg *tpg = container_of(se_tpg, 1895 struct vhost_scsi_tpg *tpg = container_of(se_tpg,
1898 struct vhost_scsi_tpg, se_tpg); 1896 struct vhost_scsi_tpg, se_tpg);
1899 struct vhost_scsi_tport *tport_wwn = tpg->tport; 1897 struct vhost_scsi_tport *tport_wwn = tpg->tport;
@@ -1968,10 +1966,10 @@ check_newline:
1968 return count; 1966 return count;
1969} 1967}
1970 1968
1971TF_TPG_BASE_ATTR(vhost_scsi, nexus, S_IRUGO | S_IWUSR); 1969CONFIGFS_ATTR(vhost_scsi_tpg_, nexus);
1972 1970
1973static struct configfs_attribute *vhost_scsi_tpg_attrs[] = { 1971static struct configfs_attribute *vhost_scsi_tpg_attrs[] = {
1974 &vhost_scsi_tpg_nexus.attr, 1972 &vhost_scsi_tpg_attr_nexus,
1975 NULL, 1973 NULL,
1976}; 1974};
1977 1975
@@ -2107,18 +2105,17 @@ static void vhost_scsi_drop_tport(struct se_wwn *wwn)
2107} 2105}
2108 2106
2109static ssize_t 2107static ssize_t
2110vhost_scsi_wwn_show_attr_version(struct target_fabric_configfs *tf, 2108vhost_scsi_wwn_version_show(struct config_item *item, char *page)
2111 char *page)
2112{ 2109{
2113 return sprintf(page, "TCM_VHOST fabric module %s on %s/%s" 2110 return sprintf(page, "TCM_VHOST fabric module %s on %s/%s"
2114 "on "UTS_RELEASE"\n", VHOST_SCSI_VERSION, utsname()->sysname, 2111 "on "UTS_RELEASE"\n", VHOST_SCSI_VERSION, utsname()->sysname,
2115 utsname()->machine); 2112 utsname()->machine);
2116} 2113}
2117 2114
2118TF_WWN_ATTR_RO(vhost_scsi, version); 2115CONFIGFS_ATTR_RO(vhost_scsi_wwn_, version);
2119 2116
2120static struct configfs_attribute *vhost_scsi_wwn_attrs[] = { 2117static struct configfs_attribute *vhost_scsi_wwn_attrs[] = {
2121 &vhost_scsi_wwn_version.attr, 2118 &vhost_scsi_wwn_attr_version,
2122 NULL, 2119 NULL,
2123}; 2120};
2124 2121
diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c
index 9eeefd7cad41..43bcae852546 100644
--- a/drivers/xen/xen-scsiback.c
+++ b/drivers/xen/xen-scsiback.c
@@ -53,7 +53,6 @@
53 53
54#include <target/target_core_base.h> 54#include <target/target_core_base.h>
55#include <target/target_core_fabric.h> 55#include <target/target_core_fabric.h>
56#include <target/target_core_fabric_configfs.h>
57 56
58#include <asm/hypervisor.h> 57#include <asm/hypervisor.h>
59 58
@@ -1438,9 +1437,10 @@ static void scsiback_aborted_task(struct se_cmd *se_cmd)
1438{ 1437{
1439} 1438}
1440 1439
1441static ssize_t scsiback_tpg_param_show_alias(struct se_portal_group *se_tpg, 1440static ssize_t scsiback_tpg_param_alias_show(struct config_item *item,
1442 char *page) 1441 char *page)
1443{ 1442{
1443 struct se_portal_group *se_tpg = param_to_tpg(item);
1444 struct scsiback_tpg *tpg = container_of(se_tpg, struct scsiback_tpg, 1444 struct scsiback_tpg *tpg = container_of(se_tpg, struct scsiback_tpg,
1445 se_tpg); 1445 se_tpg);
1446 ssize_t rb; 1446 ssize_t rb;
@@ -1452,9 +1452,10 @@ static ssize_t scsiback_tpg_param_show_alias(struct se_portal_group *se_tpg,
1452 return rb; 1452 return rb;
1453} 1453}
1454 1454
1455static ssize_t scsiback_tpg_param_store_alias(struct se_portal_group *se_tpg, 1455static ssize_t scsiback_tpg_param_alias_store(struct config_item *item,
1456 const char *page, size_t count) 1456 const char *page, size_t count)
1457{ 1457{
1458 struct se_portal_group *se_tpg = param_to_tpg(item);
1458 struct scsiback_tpg *tpg = container_of(se_tpg, struct scsiback_tpg, 1459 struct scsiback_tpg *tpg = container_of(se_tpg, struct scsiback_tpg,
1459 se_tpg); 1460 se_tpg);
1460 int len; 1461 int len;
@@ -1474,10 +1475,10 @@ static ssize_t scsiback_tpg_param_store_alias(struct se_portal_group *se_tpg,
1474 return count; 1475 return count;
1475} 1476}
1476 1477
1477TF_TPG_PARAM_ATTR(scsiback, alias, S_IRUGO | S_IWUSR); 1478CONFIGFS_ATTR(scsiback_tpg_param_, alias);
1478 1479
1479static struct configfs_attribute *scsiback_param_attrs[] = { 1480static struct configfs_attribute *scsiback_param_attrs[] = {
1480 &scsiback_tpg_param_alias.attr, 1481 &scsiback_tpg_param_attr_alias,
1481 NULL, 1482 NULL,
1482}; 1483};
1483 1484
@@ -1585,9 +1586,9 @@ static int scsiback_drop_nexus(struct scsiback_tpg *tpg)
1585 return 0; 1586 return 0;
1586} 1587}
1587 1588
1588static ssize_t scsiback_tpg_show_nexus(struct se_portal_group *se_tpg, 1589static ssize_t scsiback_tpg_nexus_show(struct config_item *item, char *page)
1589 char *page)
1590{ 1590{
1591 struct se_portal_group *se_tpg = to_tpg(item);
1591 struct scsiback_tpg *tpg = container_of(se_tpg, 1592 struct scsiback_tpg *tpg = container_of(se_tpg,
1592 struct scsiback_tpg, se_tpg); 1593 struct scsiback_tpg, se_tpg);
1593 struct scsiback_nexus *tv_nexus; 1594 struct scsiback_nexus *tv_nexus;
@@ -1606,10 +1607,10 @@ static ssize_t scsiback_tpg_show_nexus(struct se_portal_group *se_tpg,
1606 return ret; 1607 return ret;
1607} 1608}
1608 1609
1609static ssize_t scsiback_tpg_store_nexus(struct se_portal_group *se_tpg, 1610static ssize_t scsiback_tpg_nexus_store(struct config_item *item,
1610 const char *page, 1611 const char *page, size_t count)
1611 size_t count)
1612{ 1612{
1613 struct se_portal_group *se_tpg = to_tpg(item);
1613 struct scsiback_tpg *tpg = container_of(se_tpg, 1614 struct scsiback_tpg *tpg = container_of(se_tpg,
1614 struct scsiback_tpg, se_tpg); 1615 struct scsiback_tpg, se_tpg);
1615 struct scsiback_tport *tport_wwn = tpg->tport; 1616 struct scsiback_tport *tport_wwn = tpg->tport;
@@ -1681,26 +1682,25 @@ check_newline:
1681 return count; 1682 return count;
1682} 1683}
1683 1684
1684TF_TPG_BASE_ATTR(scsiback, nexus, S_IRUGO | S_IWUSR); 1685CONFIGFS_ATTR(scsiback_tpg_, nexus);
1685 1686
1686static struct configfs_attribute *scsiback_tpg_attrs[] = { 1687static struct configfs_attribute *scsiback_tpg_attrs[] = {
1687 &scsiback_tpg_nexus.attr, 1688 &scsiback_tpg_attr_nexus,
1688 NULL, 1689 NULL,
1689}; 1690};
1690 1691
1691static ssize_t 1692static ssize_t
1692scsiback_wwn_show_attr_version(struct target_fabric_configfs *tf, 1693scsiback_wwn_version_show(struct config_item *item, char *page)
1693 char *page)
1694{ 1694{
1695 return sprintf(page, "xen-pvscsi fabric module %s on %s/%s on " 1695 return sprintf(page, "xen-pvscsi fabric module %s on %s/%s on "
1696 UTS_RELEASE"\n", 1696 UTS_RELEASE"\n",
1697 VSCSI_VERSION, utsname()->sysname, utsname()->machine); 1697 VSCSI_VERSION, utsname()->sysname, utsname()->machine);
1698} 1698}
1699 1699
1700TF_WWN_ATTR_RO(scsiback, version); 1700CONFIGFS_ATTR_RO(scsiback_wwn_, version);
1701 1701
1702static struct configfs_attribute *scsiback_wwn_attrs[] = { 1702static struct configfs_attribute *scsiback_wwn_attrs[] = {
1703 &scsiback_wwn_version.attr, 1703 &scsiback_wwn_attr_version,
1704 NULL, 1704 NULL,
1705}; 1705};
1706 1706
diff --git a/include/target/configfs_macros.h b/include/target/configfs_macros.h
deleted file mode 100644
index a0fc85bbe2da..000000000000
--- a/include/target/configfs_macros.h
+++ /dev/null
@@ -1,147 +0,0 @@
1/* -*- mode: c; c-basic-offset: 8; -*-
2 * vim: noexpandtab sw=8 ts=8 sts=0:
3 *
4 * configfs_macros.h - extends macros for configfs
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public
17 * License along with this program; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 021110-1307, USA.
20 *
21 * Based on sysfs:
22 * sysfs is Copyright (C) 2001, 2002, 2003 Patrick Mochel
23 *
24 * Based on kobject.h:
25 * Copyright (c) 2002-2003 Patrick Mochel
26 * Copyright (c) 2002-2003 Open Source Development Labs
27 *
28 * configfs Copyright (C) 2005 Oracle. All rights reserved.
29 *
30 * Added CONFIGFS_EATTR() macros from original configfs.h macros
31 * Copright (C) 2008-2009 Nicholas A. Bellinger <nab@linux-iscsi.org>
32 *
33 * Please read Documentation/filesystems/configfs/configfs.txt before using
34 * the configfs interface, ESPECIALLY the parts about reference counts and
35 * item destructors.
36 */
37
38#ifndef _CONFIGFS_MACROS_H_
39#define _CONFIGFS_MACROS_H_
40
41#include <linux/configfs.h>
42
43/*
44 * Users often need to create attribute structures for their configurable
45 * attributes, containing a configfs_attribute member and function pointers
46 * for the show() and store() operations on that attribute. If they don't
47 * need anything else on the extended attribute structure, they can use
48 * this macro to define it. The argument _name isends up as
49 * 'struct _name_attribute, as well as names of to CONFIGFS_ATTR_OPS() below.
50 * The argument _item is the name of the structure containing the
51 * struct config_item or struct config_group structure members
52 */
53#define CONFIGFS_EATTR_STRUCT(_name, _item) \
54struct _name##_attribute { \
55 struct configfs_attribute attr; \
56 ssize_t (*show)(struct _item *, char *); \
57 ssize_t (*store)(struct _item *, const char *, size_t); \
58}
59
60/*
61 * With the extended attribute structure, users can use this macro
62 * (similar to sysfs' __ATTR) to make defining attributes easier.
63 * An example:
64 * #define MYITEM_EATTR(_name, _mode, _show, _store) \
65 * struct myitem_attribute childless_attr_##_name = \
66 * __CONFIGFS_EATTR(_name, _mode, _show, _store)
67 */
68#define __CONFIGFS_EATTR(_name, _mode, _show, _store) \
69{ \
70 .attr = { \
71 .ca_name = __stringify(_name), \
72 .ca_mode = _mode, \
73 .ca_owner = THIS_MODULE, \
74 }, \
75 .show = _show, \
76 .store = _store, \
77}
78/* Here is a readonly version, only requiring a show() operation */
79#define __CONFIGFS_EATTR_RO(_name, _show) \
80{ \
81 .attr = { \
82 .ca_name = __stringify(_name), \
83 .ca_mode = 0444, \
84 .ca_owner = THIS_MODULE, \
85 }, \
86 .show = _show, \
87}
88
89/*
90 * With these extended attributes, the simple show_attribute() and
91 * store_attribute() operations need to call the show() and store() of the
92 * attributes. This is a common pattern, so we provide a macro to define
93 * them. The argument _name is the name of the attribute defined by
94 * CONFIGFS_ATTR_STRUCT(). The argument _item is the name of the structure
95 * containing the struct config_item or struct config_group structure member.
96 * The argument _item_member is the actual name of the struct config_* struct
97 * in your _item structure. Meaning my_structure->some_config_group.
98 * ^^_item^^^^^ ^^_item_member^^^
99 * This macro expects the attributes to be named "struct <name>_attribute".
100 */
101#define CONFIGFS_EATTR_OPS_TO_FUNC(_name, _item, _item_member) \
102static struct _item *to_##_name(struct config_item *ci) \
103{ \
104 return (ci) ? container_of(to_config_group(ci), struct _item, \
105 _item_member) : NULL; \
106}
107
108#define CONFIGFS_EATTR_OPS_SHOW(_name, _item) \
109static ssize_t _name##_attr_show(struct config_item *item, \
110 struct configfs_attribute *attr, \
111 char *page) \
112{ \
113 struct _item *_item = to_##_name(item); \
114 struct _name##_attribute * _name##_attr = \
115 container_of(attr, struct _name##_attribute, attr); \
116 ssize_t ret = 0; \
117 \
118 if (_name##_attr->show) \
119 ret = _name##_attr->show(_item, page); \
120 return ret; \
121}
122
123#define CONFIGFS_EATTR_OPS_STORE(_name, _item) \
124static ssize_t _name##_attr_store(struct config_item *item, \
125 struct configfs_attribute *attr, \
126 const char *page, size_t count) \
127{ \
128 struct _item *_item = to_##_name(item); \
129 struct _name##_attribute * _name##_attr = \
130 container_of(attr, struct _name##_attribute, attr); \
131 ssize_t ret = -EINVAL; \
132 \
133 if (_name##_attr->store) \
134 ret = _name##_attr->store(_item, page, count); \
135 return ret; \
136}
137
138#define CONFIGFS_EATTR_OPS(_name, _item, _item_member) \
139 CONFIGFS_EATTR_OPS_TO_FUNC(_name, _item, _item_member); \
140 CONFIGFS_EATTR_OPS_SHOW(_name, _item); \
141 CONFIGFS_EATTR_OPS_STORE(_name, _item);
142
143#define CONFIGFS_EATTR_OPS_RO(_name, _item, _item_member) \
144 CONFIGFS_EATTR_OPS_TO_FUNC(_name, _item, _item_member); \
145 CONFIGFS_EATTR_OPS_SHOW(_name, _item);
146
147#endif /* _CONFIGFS_MACROS_H_ */
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
index ac9bf1c0e42d..8b9c727b533b 100644
--- a/include/target/target_core_base.h
+++ b/include/target/target_core_base.h
@@ -563,6 +563,36 @@ struct se_node_acl {
563 struct kref acl_kref; 563 struct kref acl_kref;
564}; 564};
565 565
566static inline struct se_node_acl *acl_to_nacl(struct config_item *item)
567{
568 return container_of(to_config_group(item), struct se_node_acl,
569 acl_group);
570}
571
572static inline struct se_node_acl *attrib_to_nacl(struct config_item *item)
573{
574 return container_of(to_config_group(item), struct se_node_acl,
575 acl_attrib_group);
576}
577
578static inline struct se_node_acl *auth_to_nacl(struct config_item *item)
579{
580 return container_of(to_config_group(item), struct se_node_acl,
581 acl_auth_group);
582}
583
584static inline struct se_node_acl *param_to_nacl(struct config_item *item)
585{
586 return container_of(to_config_group(item), struct se_node_acl,
587 acl_param_group);
588}
589
590static inline struct se_node_acl *fabric_stat_to_nacl(struct config_item *item)
591{
592 return container_of(to_config_group(item), struct se_node_acl,
593 acl_fabric_stat_group);
594}
595
566struct se_session { 596struct se_session {
567 unsigned sess_tearing_down:1; 597 unsigned sess_tearing_down:1;
568 u64 sess_bin_isid; 598 u64 sess_bin_isid;
@@ -820,6 +850,12 @@ struct se_tpg_np {
820 struct config_group tpg_np_group; 850 struct config_group tpg_np_group;
821}; 851};
822 852
853static inline struct se_tpg_np *to_tpg_np(struct config_item *item)
854{
855 return container_of(to_config_group(item), struct se_tpg_np,
856 tpg_np_group);
857}
858
823struct se_portal_group { 859struct se_portal_group {
824 /* 860 /*
825 * PROTOCOL IDENTIFIER value per SPC4, 7.5.1. 861 * PROTOCOL IDENTIFIER value per SPC4, 7.5.1.
@@ -856,6 +892,30 @@ struct se_portal_group {
856 struct config_group tpg_param_group; 892 struct config_group tpg_param_group;
857}; 893};
858 894
895static inline struct se_portal_group *to_tpg(struct config_item *item)
896{
897 return container_of(to_config_group(item), struct se_portal_group,
898 tpg_group);
899}
900
901static inline struct se_portal_group *attrib_to_tpg(struct config_item *item)
902{
903 return container_of(to_config_group(item), struct se_portal_group,
904 tpg_attrib_group);
905}
906
907static inline struct se_portal_group *auth_to_tpg(struct config_item *item)
908{
909 return container_of(to_config_group(item), struct se_portal_group,
910 tpg_auth_group);
911}
912
913static inline struct se_portal_group *param_to_tpg(struct config_item *item)
914{
915 return container_of(to_config_group(item), struct se_portal_group,
916 tpg_param_group);
917}
918
859struct se_wwn { 919struct se_wwn {
860 struct target_fabric_configfs *wwn_tf; 920 struct target_fabric_configfs *wwn_tf;
861 struct config_group wwn_group; 921 struct config_group wwn_group;
diff --git a/include/target/target_core_fabric_configfs.h b/include/target/target_core_fabric_configfs.h
deleted file mode 100644
index 7a0649c09e79..000000000000
--- a/include/target/target_core_fabric_configfs.h
+++ /dev/null
@@ -1,122 +0,0 @@
1/*
2 * Used for tfc_wwn_cit attributes
3 */
4
5#include <target/configfs_macros.h>
6
7CONFIGFS_EATTR_STRUCT(target_fabric_nacl_attrib, se_node_acl);
8#define TF_NACL_ATTRIB_ATTR(_fabric, _name, _mode) \
9static struct target_fabric_nacl_attrib_attribute _fabric##_nacl_attrib_##_name = \
10 __CONFIGFS_EATTR(_name, _mode, \
11 _fabric##_nacl_attrib_show_##_name, \
12 _fabric##_nacl_attrib_store_##_name);
13
14CONFIGFS_EATTR_STRUCT(target_fabric_nacl_auth, se_node_acl);
15#define TF_NACL_AUTH_ATTR(_fabric, _name, _mode) \
16static struct target_fabric_nacl_auth_attribute _fabric##_nacl_auth_##_name = \
17 __CONFIGFS_EATTR(_name, _mode, \
18 _fabric##_nacl_auth_show_##_name, \
19 _fabric##_nacl_auth_store_##_name);
20
21#define TF_NACL_AUTH_ATTR_RO(_fabric, _name) \
22static struct target_fabric_nacl_auth_attribute _fabric##_nacl_auth_##_name = \
23 __CONFIGFS_EATTR_RO(_name, \
24 _fabric##_nacl_auth_show_##_name);
25
26CONFIGFS_EATTR_STRUCT(target_fabric_nacl_param, se_node_acl);
27#define TF_NACL_PARAM_ATTR(_fabric, _name, _mode) \
28static struct target_fabric_nacl_param_attribute _fabric##_nacl_param_##_name = \
29 __CONFIGFS_EATTR(_name, _mode, \
30 _fabric##_nacl_param_show_##_name, \
31 _fabric##_nacl_param_store_##_name);
32
33#define TF_NACL_PARAM_ATTR_RO(_fabric, _name) \
34static struct target_fabric_nacl_param_attribute _fabric##_nacl_param_##_name = \
35 __CONFIGFS_EATTR_RO(_name, \
36 _fabric##_nacl_param_show_##_name);
37
38
39CONFIGFS_EATTR_STRUCT(target_fabric_nacl_base, se_node_acl);
40#define TF_NACL_BASE_ATTR(_fabric, _name, _mode) \
41static struct target_fabric_nacl_base_attribute _fabric##_nacl_##_name = \
42 __CONFIGFS_EATTR(_name, _mode, \
43 _fabric##_nacl_show_##_name, \
44 _fabric##_nacl_store_##_name);
45
46#define TF_NACL_BASE_ATTR_RO(_fabric, _name) \
47static struct target_fabric_nacl_base_attribute _fabric##_nacl_##_name = \
48 __CONFIGFS_EATTR_RO(_name, \
49 _fabric##_nacl_show_##_name);
50
51CONFIGFS_EATTR_STRUCT(target_fabric_np_base, se_tpg_np);
52#define TF_NP_BASE_ATTR(_fabric, _name, _mode) \
53static struct target_fabric_np_base_attribute _fabric##_np_##_name = \
54 __CONFIGFS_EATTR(_name, _mode, \
55 _fabric##_np_show_##_name, \
56 _fabric##_np_store_##_name);
57
58CONFIGFS_EATTR_STRUCT(target_fabric_tpg_attrib, se_portal_group);
59#define TF_TPG_ATTRIB_ATTR(_fabric, _name, _mode) \
60static struct target_fabric_tpg_attrib_attribute _fabric##_tpg_attrib_##_name = \
61 __CONFIGFS_EATTR(_name, _mode, \
62 _fabric##_tpg_attrib_show_##_name, \
63 _fabric##_tpg_attrib_store_##_name);
64
65CONFIGFS_EATTR_STRUCT(target_fabric_tpg_auth, se_portal_group);
66#define TF_TPG_AUTH_ATTR(_fabric, _name, _mode) \
67static struct target_fabric_tpg_auth_attribute _fabric##_tpg_auth_##_name = \
68 __CONFIGFS_EATTR(_name, _mode, \
69 _fabric##_tpg_auth_show_##_name, \
70 _fabric##_tpg_auth_store_##_name);
71
72#define TF_TPG_AUTH_ATTR_RO(_fabric, _name) \
73static struct target_fabric_tpg_auth_attribute _fabric##_tpg_auth_##_name = \
74 __CONFIGFS_EATTR_RO(_name, \
75 _fabric##_tpg_auth_show_##_name);
76
77CONFIGFS_EATTR_STRUCT(target_fabric_tpg_param, se_portal_group);
78#define TF_TPG_PARAM_ATTR(_fabric, _name, _mode) \
79static struct target_fabric_tpg_param_attribute _fabric##_tpg_param_##_name = \
80 __CONFIGFS_EATTR(_name, _mode, \
81 _fabric##_tpg_param_show_##_name, \
82 _fabric##_tpg_param_store_##_name);
83
84
85CONFIGFS_EATTR_STRUCT(target_fabric_tpg, se_portal_group);
86#define TF_TPG_BASE_ATTR(_fabric, _name, _mode) \
87static struct target_fabric_tpg_attribute _fabric##_tpg_##_name = \
88 __CONFIGFS_EATTR(_name, _mode, \
89 _fabric##_tpg_show_##_name, \
90 _fabric##_tpg_store_##_name);
91
92
93#define TF_TPG_BASE_ATTR_RO(_fabric, _name) \
94static struct target_fabric_tpg_attribute _fabric##_tpg_##_name = \
95 __CONFIGFS_EATTR_RO(_name, \
96 _fabric##_tpg_show_##_name);
97
98CONFIGFS_EATTR_STRUCT(target_fabric_wwn, target_fabric_configfs);
99#define TF_WWN_ATTR(_fabric, _name, _mode) \
100static struct target_fabric_wwn_attribute _fabric##_wwn_##_name = \
101 __CONFIGFS_EATTR(_name, _mode, \
102 _fabric##_wwn_show_attr_##_name, \
103 _fabric##_wwn_store_attr_##_name);
104
105#define TF_WWN_ATTR_RO(_fabric, _name) \
106static struct target_fabric_wwn_attribute _fabric##_wwn_##_name = \
107 __CONFIGFS_EATTR_RO(_name, \
108 _fabric##_wwn_show_attr_##_name);
109
110CONFIGFS_EATTR_STRUCT(target_fabric_discovery, target_fabric_configfs);
111#define TF_DISC_ATTR(_fabric, _name, _mode) \
112static struct target_fabric_discovery_attribute _fabric##_disc_##_name = \
113 __CONFIGFS_EATTR(_name, _mode, \
114 _fabric##_disc_show_##_name, \
115 _fabric##_disc_store_##_name);
116
117#define TF_DISC_ATTR_RO(_fabric, _name) \
118static struct target_fabric_discovery_attribute _fabric##_disc_##_name = \
119 __CONFIGFS_EATTR_RO(_name, \
120 _fabric##_disc_show_##_name);
121
122extern int target_fabric_setup_cits(struct target_fabric_configfs *);