diff options
Diffstat (limited to 'drivers/target/iscsi/iscsi_target_configfs.c')
-rw-r--r-- | drivers/target/iscsi/iscsi_target_configfs.c | 86 |
1 files changed, 53 insertions, 33 deletions
diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c index fd145259361d..e3318edb233d 100644 --- a/drivers/target/iscsi/iscsi_target_configfs.c +++ b/drivers/target/iscsi/iscsi_target_configfs.c | |||
@@ -372,7 +372,7 @@ static ssize_t iscsi_nacl_attrib_show_##name( \ | |||
372 | struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \ | 372 | struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \ |
373 | se_node_acl); \ | 373 | se_node_acl); \ |
374 | \ | 374 | \ |
375 | return sprintf(page, "%u\n", ISCSI_NODE_ATTRIB(nacl)->name); \ | 375 | return sprintf(page, "%u\n", nacl->node_attrib.name); \ |
376 | } \ | 376 | } \ |
377 | \ | 377 | \ |
378 | static ssize_t iscsi_nacl_attrib_store_##name( \ | 378 | static ssize_t iscsi_nacl_attrib_store_##name( \ |
@@ -897,7 +897,7 @@ static struct se_node_acl *lio_target_make_nodeacl( | |||
897 | if (!se_nacl_new) | 897 | if (!se_nacl_new) |
898 | return ERR_PTR(-ENOMEM); | 898 | return ERR_PTR(-ENOMEM); |
899 | 899 | ||
900 | cmdsn_depth = ISCSI_TPG_ATTRIB(tpg)->default_cmdsn_depth; | 900 | cmdsn_depth = tpg->tpg_attrib.default_cmdsn_depth; |
901 | /* | 901 | /* |
902 | * se_nacl_new may be released by core_tpg_add_initiator_node_acl() | 902 | * se_nacl_new may be released by core_tpg_add_initiator_node_acl() |
903 | * when converting a NdoeACL from demo mode -> explict | 903 | * when converting a NdoeACL from demo mode -> explict |
@@ -920,9 +920,9 @@ static struct se_node_acl *lio_target_make_nodeacl( | |||
920 | return ERR_PTR(-ENOMEM); | 920 | return ERR_PTR(-ENOMEM); |
921 | } | 921 | } |
922 | 922 | ||
923 | stats_cg->default_groups[0] = &NODE_STAT_GRPS(acl)->iscsi_sess_stats_group; | 923 | stats_cg->default_groups[0] = &acl->node_stat_grps.iscsi_sess_stats_group; |
924 | stats_cg->default_groups[1] = NULL; | 924 | stats_cg->default_groups[1] = NULL; |
925 | config_group_init_type_name(&NODE_STAT_GRPS(acl)->iscsi_sess_stats_group, | 925 | config_group_init_type_name(&acl->node_stat_grps.iscsi_sess_stats_group, |
926 | "iscsi_sess_stats", &iscsi_stat_sess_cit); | 926 | "iscsi_sess_stats", &iscsi_stat_sess_cit); |
927 | 927 | ||
928 | return se_nacl; | 928 | return se_nacl; |
@@ -967,7 +967,7 @@ static ssize_t iscsi_tpg_attrib_show_##name( \ | |||
967 | if (iscsit_get_tpg(tpg) < 0) \ | 967 | if (iscsit_get_tpg(tpg) < 0) \ |
968 | return -EINVAL; \ | 968 | return -EINVAL; \ |
969 | \ | 969 | \ |
970 | rb = sprintf(page, "%u\n", ISCSI_TPG_ATTRIB(tpg)->name); \ | 970 | rb = sprintf(page, "%u\n", tpg->tpg_attrib.name); \ |
971 | iscsit_put_tpg(tpg); \ | 971 | iscsit_put_tpg(tpg); \ |
972 | return rb; \ | 972 | return rb; \ |
973 | } \ | 973 | } \ |
@@ -1041,6 +1041,16 @@ TPG_ATTR(demo_mode_write_protect, S_IRUGO | S_IWUSR); | |||
1041 | */ | 1041 | */ |
1042 | DEF_TPG_ATTRIB(prod_mode_write_protect); | 1042 | DEF_TPG_ATTRIB(prod_mode_write_protect); |
1043 | TPG_ATTR(prod_mode_write_protect, S_IRUGO | S_IWUSR); | 1043 | TPG_ATTR(prod_mode_write_protect, S_IRUGO | S_IWUSR); |
1044 | /* | ||
1045 | * Define iscsi_tpg_attrib_s_demo_mode_discovery, | ||
1046 | */ | ||
1047 | DEF_TPG_ATTRIB(demo_mode_discovery); | ||
1048 | TPG_ATTR(demo_mode_discovery, S_IRUGO | S_IWUSR); | ||
1049 | /* | ||
1050 | * Define iscsi_tpg_attrib_s_default_erl | ||
1051 | */ | ||
1052 | DEF_TPG_ATTRIB(default_erl); | ||
1053 | TPG_ATTR(default_erl, S_IRUGO | S_IWUSR); | ||
1044 | 1054 | ||
1045 | static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { | 1055 | static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { |
1046 | &iscsi_tpg_attrib_authentication.attr, | 1056 | &iscsi_tpg_attrib_authentication.attr, |
@@ -1051,6 +1061,8 @@ static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { | |||
1051 | &iscsi_tpg_attrib_cache_dynamic_acls.attr, | 1061 | &iscsi_tpg_attrib_cache_dynamic_acls.attr, |
1052 | &iscsi_tpg_attrib_demo_mode_write_protect.attr, | 1062 | &iscsi_tpg_attrib_demo_mode_write_protect.attr, |
1053 | &iscsi_tpg_attrib_prod_mode_write_protect.attr, | 1063 | &iscsi_tpg_attrib_prod_mode_write_protect.attr, |
1064 | &iscsi_tpg_attrib_demo_mode_discovery.attr, | ||
1065 | &iscsi_tpg_attrib_default_erl.attr, | ||
1054 | NULL, | 1066 | NULL, |
1055 | }; | 1067 | }; |
1056 | 1068 | ||
@@ -1514,21 +1526,21 @@ static struct se_wwn *lio_target_call_coreaddtiqn( | |||
1514 | return ERR_PTR(-ENOMEM); | 1526 | return ERR_PTR(-ENOMEM); |
1515 | } | 1527 | } |
1516 | 1528 | ||
1517 | stats_cg->default_groups[0] = &WWN_STAT_GRPS(tiqn)->iscsi_instance_group; | 1529 | stats_cg->default_groups[0] = &tiqn->tiqn_stat_grps.iscsi_instance_group; |
1518 | stats_cg->default_groups[1] = &WWN_STAT_GRPS(tiqn)->iscsi_sess_err_group; | 1530 | stats_cg->default_groups[1] = &tiqn->tiqn_stat_grps.iscsi_sess_err_group; |
1519 | stats_cg->default_groups[2] = &WWN_STAT_GRPS(tiqn)->iscsi_tgt_attr_group; | 1531 | stats_cg->default_groups[2] = &tiqn->tiqn_stat_grps.iscsi_tgt_attr_group; |
1520 | stats_cg->default_groups[3] = &WWN_STAT_GRPS(tiqn)->iscsi_login_stats_group; | 1532 | stats_cg->default_groups[3] = &tiqn->tiqn_stat_grps.iscsi_login_stats_group; |
1521 | stats_cg->default_groups[4] = &WWN_STAT_GRPS(tiqn)->iscsi_logout_stats_group; | 1533 | stats_cg->default_groups[4] = &tiqn->tiqn_stat_grps.iscsi_logout_stats_group; |
1522 | stats_cg->default_groups[5] = NULL; | 1534 | stats_cg->default_groups[5] = NULL; |
1523 | config_group_init_type_name(&WWN_STAT_GRPS(tiqn)->iscsi_instance_group, | 1535 | config_group_init_type_name(&tiqn->tiqn_stat_grps.iscsi_instance_group, |
1524 | "iscsi_instance", &iscsi_stat_instance_cit); | 1536 | "iscsi_instance", &iscsi_stat_instance_cit); |
1525 | config_group_init_type_name(&WWN_STAT_GRPS(tiqn)->iscsi_sess_err_group, | 1537 | config_group_init_type_name(&tiqn->tiqn_stat_grps.iscsi_sess_err_group, |
1526 | "iscsi_sess_err", &iscsi_stat_sess_err_cit); | 1538 | "iscsi_sess_err", &iscsi_stat_sess_err_cit); |
1527 | config_group_init_type_name(&WWN_STAT_GRPS(tiqn)->iscsi_tgt_attr_group, | 1539 | config_group_init_type_name(&tiqn->tiqn_stat_grps.iscsi_tgt_attr_group, |
1528 | "iscsi_tgt_attr", &iscsi_stat_tgt_attr_cit); | 1540 | "iscsi_tgt_attr", &iscsi_stat_tgt_attr_cit); |
1529 | config_group_init_type_name(&WWN_STAT_GRPS(tiqn)->iscsi_login_stats_group, | 1541 | config_group_init_type_name(&tiqn->tiqn_stat_grps.iscsi_login_stats_group, |
1530 | "iscsi_login_stats", &iscsi_stat_login_cit); | 1542 | "iscsi_login_stats", &iscsi_stat_login_cit); |
1531 | config_group_init_type_name(&WWN_STAT_GRPS(tiqn)->iscsi_logout_stats_group, | 1543 | config_group_init_type_name(&tiqn->tiqn_stat_grps.iscsi_logout_stats_group, |
1532 | "iscsi_logout_stats", &iscsi_stat_logout_cit); | 1544 | "iscsi_logout_stats", &iscsi_stat_logout_cit); |
1533 | 1545 | ||
1534 | pr_debug("LIO_Target_ConfigFS: REGISTER -> %s\n", tiqn->tiqn); | 1546 | pr_debug("LIO_Target_ConfigFS: REGISTER -> %s\n", tiqn->tiqn); |
@@ -1784,6 +1796,11 @@ static int lio_queue_status(struct se_cmd *se_cmd) | |||
1784 | struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd); | 1796 | struct iscsi_cmd *cmd = container_of(se_cmd, struct iscsi_cmd, se_cmd); |
1785 | 1797 | ||
1786 | cmd->i_state = ISTATE_SEND_STATUS; | 1798 | cmd->i_state = ISTATE_SEND_STATUS; |
1799 | |||
1800 | if (cmd->se_cmd.scsi_status || cmd->sense_reason) { | ||
1801 | iscsit_add_cmd_to_response_queue(cmd, cmd->conn, cmd->i_state); | ||
1802 | return 0; | ||
1803 | } | ||
1787 | cmd->conn->conn_transport->iscsit_queue_status(cmd->conn, cmd); | 1804 | cmd->conn->conn_transport->iscsit_queue_status(cmd->conn, cmd); |
1788 | 1805 | ||
1789 | return 0; | 1806 | return 0; |
@@ -1815,21 +1832,21 @@ static u32 lio_tpg_get_default_depth(struct se_portal_group *se_tpg) | |||
1815 | { | 1832 | { |
1816 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; | 1833 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; |
1817 | 1834 | ||
1818 | return ISCSI_TPG_ATTRIB(tpg)->default_cmdsn_depth; | 1835 | return tpg->tpg_attrib.default_cmdsn_depth; |
1819 | } | 1836 | } |
1820 | 1837 | ||
1821 | static int lio_tpg_check_demo_mode(struct se_portal_group *se_tpg) | 1838 | static int lio_tpg_check_demo_mode(struct se_portal_group *se_tpg) |
1822 | { | 1839 | { |
1823 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; | 1840 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; |
1824 | 1841 | ||
1825 | return ISCSI_TPG_ATTRIB(tpg)->generate_node_acls; | 1842 | return tpg->tpg_attrib.generate_node_acls; |
1826 | } | 1843 | } |
1827 | 1844 | ||
1828 | static int lio_tpg_check_demo_mode_cache(struct se_portal_group *se_tpg) | 1845 | static int lio_tpg_check_demo_mode_cache(struct se_portal_group *se_tpg) |
1829 | { | 1846 | { |
1830 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; | 1847 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; |
1831 | 1848 | ||
1832 | return ISCSI_TPG_ATTRIB(tpg)->cache_dynamic_acls; | 1849 | return tpg->tpg_attrib.cache_dynamic_acls; |
1833 | } | 1850 | } |
1834 | 1851 | ||
1835 | static int lio_tpg_check_demo_mode_write_protect( | 1852 | static int lio_tpg_check_demo_mode_write_protect( |
@@ -1837,7 +1854,7 @@ static int lio_tpg_check_demo_mode_write_protect( | |||
1837 | { | 1854 | { |
1838 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; | 1855 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; |
1839 | 1856 | ||
1840 | return ISCSI_TPG_ATTRIB(tpg)->demo_mode_write_protect; | 1857 | return tpg->tpg_attrib.demo_mode_write_protect; |
1841 | } | 1858 | } |
1842 | 1859 | ||
1843 | static int lio_tpg_check_prod_mode_write_protect( | 1860 | static int lio_tpg_check_prod_mode_write_protect( |
@@ -1845,7 +1862,7 @@ static int lio_tpg_check_prod_mode_write_protect( | |||
1845 | { | 1862 | { |
1846 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; | 1863 | struct iscsi_portal_group *tpg = se_tpg->se_tpg_fabric_ptr; |
1847 | 1864 | ||
1848 | return ISCSI_TPG_ATTRIB(tpg)->prod_mode_write_protect; | 1865 | return tpg->tpg_attrib.prod_mode_write_protect; |
1849 | } | 1866 | } |
1850 | 1867 | ||
1851 | static void lio_tpg_release_fabric_acl( | 1868 | static void lio_tpg_release_fabric_acl( |
@@ -1908,9 +1925,12 @@ static void lio_set_default_node_attributes(struct se_node_acl *se_acl) | |||
1908 | { | 1925 | { |
1909 | struct iscsi_node_acl *acl = container_of(se_acl, struct iscsi_node_acl, | 1926 | struct iscsi_node_acl *acl = container_of(se_acl, struct iscsi_node_acl, |
1910 | se_node_acl); | 1927 | se_node_acl); |
1928 | struct se_portal_group *se_tpg = se_acl->se_tpg; | ||
1929 | struct iscsi_portal_group *tpg = container_of(se_tpg, | ||
1930 | struct iscsi_portal_group, tpg_se_tpg); | ||
1911 | 1931 | ||
1912 | ISCSI_NODE_ATTRIB(acl)->nacl = acl; | 1932 | acl->node_attrib.nacl = acl; |
1913 | iscsit_set_default_node_attribues(acl); | 1933 | iscsit_set_default_node_attribues(acl, tpg); |
1914 | } | 1934 | } |
1915 | 1935 | ||
1916 | static int lio_check_stop_free(struct se_cmd *se_cmd) | 1936 | static int lio_check_stop_free(struct se_cmd *se_cmd) |
@@ -1995,17 +2015,17 @@ int iscsi_target_register_configfs(void) | |||
1995 | * Setup default attribute lists for various fabric->tf_cit_tmpl | 2015 | * Setup default attribute lists for various fabric->tf_cit_tmpl |
1996 | * sturct config_item_type's | 2016 | * sturct config_item_type's |
1997 | */ | 2017 | */ |
1998 | TF_CIT_TMPL(fabric)->tfc_discovery_cit.ct_attrs = lio_target_discovery_auth_attrs; | 2018 | fabric->tf_cit_tmpl.tfc_discovery_cit.ct_attrs = lio_target_discovery_auth_attrs; |
1999 | TF_CIT_TMPL(fabric)->tfc_wwn_cit.ct_attrs = lio_target_wwn_attrs; | 2019 | fabric->tf_cit_tmpl.tfc_wwn_cit.ct_attrs = lio_target_wwn_attrs; |
2000 | TF_CIT_TMPL(fabric)->tfc_tpg_base_cit.ct_attrs = lio_target_tpg_attrs; | 2020 | fabric->tf_cit_tmpl.tfc_tpg_base_cit.ct_attrs = lio_target_tpg_attrs; |
2001 | TF_CIT_TMPL(fabric)->tfc_tpg_attrib_cit.ct_attrs = lio_target_tpg_attrib_attrs; | 2021 | fabric->tf_cit_tmpl.tfc_tpg_attrib_cit.ct_attrs = lio_target_tpg_attrib_attrs; |
2002 | TF_CIT_TMPL(fabric)->tfc_tpg_auth_cit.ct_attrs = lio_target_tpg_auth_attrs; | 2022 | fabric->tf_cit_tmpl.tfc_tpg_auth_cit.ct_attrs = lio_target_tpg_auth_attrs; |
2003 | TF_CIT_TMPL(fabric)->tfc_tpg_param_cit.ct_attrs = lio_target_tpg_param_attrs; | 2023 | fabric->tf_cit_tmpl.tfc_tpg_param_cit.ct_attrs = lio_target_tpg_param_attrs; |
2004 | TF_CIT_TMPL(fabric)->tfc_tpg_np_base_cit.ct_attrs = lio_target_portal_attrs; | 2024 | fabric->tf_cit_tmpl.tfc_tpg_np_base_cit.ct_attrs = lio_target_portal_attrs; |
2005 | TF_CIT_TMPL(fabric)->tfc_tpg_nacl_base_cit.ct_attrs = lio_target_initiator_attrs; | 2025 | fabric->tf_cit_tmpl.tfc_tpg_nacl_base_cit.ct_attrs = lio_target_initiator_attrs; |
2006 | TF_CIT_TMPL(fabric)->tfc_tpg_nacl_attrib_cit.ct_attrs = lio_target_nacl_attrib_attrs; | 2026 | fabric->tf_cit_tmpl.tfc_tpg_nacl_attrib_cit.ct_attrs = lio_target_nacl_attrib_attrs; |
2007 | TF_CIT_TMPL(fabric)->tfc_tpg_nacl_auth_cit.ct_attrs = lio_target_nacl_auth_attrs; | 2027 | fabric->tf_cit_tmpl.tfc_tpg_nacl_auth_cit.ct_attrs = lio_target_nacl_auth_attrs; |
2008 | TF_CIT_TMPL(fabric)->tfc_tpg_nacl_param_cit.ct_attrs = lio_target_nacl_param_attrs; | 2028 | fabric->tf_cit_tmpl.tfc_tpg_nacl_param_cit.ct_attrs = lio_target_nacl_param_attrs; |
2009 | 2029 | ||
2010 | ret = target_fabric_configfs_register(fabric); | 2030 | ret = target_fabric_configfs_register(fabric); |
2011 | if (ret < 0) { | 2031 | if (ret < 0) { |