target: add a new add_wwn_groups fabrics method
We need to have the WWN fully initialized before addig default groups to it, so add a new method to add these groups after the WWN has been initialized. Also remove the default groups in the core while we're at it. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
e6e202edf0
commit
839559e106
|
@ -1239,6 +1239,16 @@ static struct se_wwn *lio_target_call_coreaddtiqn(
|
||||||
if (IS_ERR(tiqn))
|
if (IS_ERR(tiqn))
|
||||||
return ERR_CAST(tiqn);
|
return ERR_CAST(tiqn);
|
||||||
|
|
||||||
|
pr_debug("LIO_Target_ConfigFS: REGISTER -> %s\n", tiqn->tiqn);
|
||||||
|
pr_debug("LIO_Target_ConfigFS: REGISTER -> Allocated Node:"
|
||||||
|
" %s\n", name);
|
||||||
|
return &tiqn->tiqn_wwn;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void lio_target_add_wwn_groups(struct se_wwn *wwn)
|
||||||
|
{
|
||||||
|
struct iscsi_tiqn *tiqn = container_of(wwn, struct iscsi_tiqn, tiqn_wwn);
|
||||||
|
|
||||||
config_group_init_type_name(&tiqn->tiqn_stat_grps.iscsi_instance_group,
|
config_group_init_type_name(&tiqn->tiqn_stat_grps.iscsi_instance_group,
|
||||||
"iscsi_instance", &iscsi_stat_instance_cit);
|
"iscsi_instance", &iscsi_stat_instance_cit);
|
||||||
configfs_add_default_group(&tiqn->tiqn_stat_grps.iscsi_instance_group,
|
configfs_add_default_group(&tiqn->tiqn_stat_grps.iscsi_instance_group,
|
||||||
|
@ -1263,12 +1273,6 @@ static struct se_wwn *lio_target_call_coreaddtiqn(
|
||||||
"iscsi_logout_stats", &iscsi_stat_logout_cit);
|
"iscsi_logout_stats", &iscsi_stat_logout_cit);
|
||||||
configfs_add_default_group(&tiqn->tiqn_stat_grps.iscsi_logout_stats_group,
|
configfs_add_default_group(&tiqn->tiqn_stat_grps.iscsi_logout_stats_group,
|
||||||
&tiqn->tiqn_wwn.fabric_stat_group);
|
&tiqn->tiqn_wwn.fabric_stat_group);
|
||||||
|
|
||||||
|
|
||||||
pr_debug("LIO_Target_ConfigFS: REGISTER -> %s\n", tiqn->tiqn);
|
|
||||||
pr_debug("LIO_Target_ConfigFS: REGISTER -> Allocated Node:"
|
|
||||||
" %s\n", name);
|
|
||||||
return &tiqn->tiqn_wwn;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void lio_target_call_coredeltiqn(
|
static void lio_target_call_coredeltiqn(
|
||||||
|
@ -1276,8 +1280,6 @@ static void lio_target_call_coredeltiqn(
|
||||||
{
|
{
|
||||||
struct iscsi_tiqn *tiqn = container_of(wwn, struct iscsi_tiqn, tiqn_wwn);
|
struct iscsi_tiqn *tiqn = container_of(wwn, struct iscsi_tiqn, tiqn_wwn);
|
||||||
|
|
||||||
configfs_remove_default_groups(&tiqn->tiqn_wwn.fabric_stat_group);
|
|
||||||
|
|
||||||
pr_debug("LIO_Target_ConfigFS: DEREGISTER -> %s\n",
|
pr_debug("LIO_Target_ConfigFS: DEREGISTER -> %s\n",
|
||||||
tiqn->tiqn);
|
tiqn->tiqn);
|
||||||
iscsit_del_tiqn(tiqn);
|
iscsit_del_tiqn(tiqn);
|
||||||
|
@ -1652,6 +1654,7 @@ const struct target_core_fabric_ops iscsi_ops = {
|
||||||
.aborted_task = lio_aborted_task,
|
.aborted_task = lio_aborted_task,
|
||||||
.fabric_make_wwn = lio_target_call_coreaddtiqn,
|
.fabric_make_wwn = lio_target_call_coreaddtiqn,
|
||||||
.fabric_drop_wwn = lio_target_call_coredeltiqn,
|
.fabric_drop_wwn = lio_target_call_coredeltiqn,
|
||||||
|
.add_wwn_groups = lio_target_add_wwn_groups,
|
||||||
.fabric_make_tpg = lio_target_tiqn_addtpg,
|
.fabric_make_tpg = lio_target_tiqn_addtpg,
|
||||||
.fabric_drop_tpg = lio_target_tiqn_deltpg,
|
.fabric_drop_tpg = lio_target_tiqn_deltpg,
|
||||||
.fabric_make_np = lio_target_call_addnptotpg,
|
.fabric_make_np = lio_target_call_addnptotpg,
|
||||||
|
|
|
@ -891,6 +891,7 @@ static void target_fabric_release_wwn(struct config_item *item)
|
||||||
struct se_wwn, wwn_group);
|
struct se_wwn, wwn_group);
|
||||||
struct target_fabric_configfs *tf = wwn->wwn_tf;
|
struct target_fabric_configfs *tf = wwn->wwn_tf;
|
||||||
|
|
||||||
|
configfs_remove_default_groups(&wwn->fabric_stat_group);
|
||||||
tf->tf_ops->fabric_drop_wwn(wwn);
|
tf->tf_ops->fabric_drop_wwn(wwn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -944,6 +945,8 @@ static struct config_group *target_fabric_make_wwn(
|
||||||
&tf->tf_wwn_fabric_stats_cit);
|
&tf->tf_wwn_fabric_stats_cit);
|
||||||
configfs_add_default_group(&wwn->fabric_stat_group, &wwn->wwn_group);
|
configfs_add_default_group(&wwn->fabric_stat_group, &wwn->wwn_group);
|
||||||
|
|
||||||
|
if (tf->tf_ops->add_wwn_groups)
|
||||||
|
tf->tf_ops->add_wwn_groups(wwn);
|
||||||
return &wwn->wwn_group;
|
return &wwn->wwn_group;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,7 @@ struct target_core_fabric_ops {
|
||||||
struct se_wwn *(*fabric_make_wwn)(struct target_fabric_configfs *,
|
struct se_wwn *(*fabric_make_wwn)(struct target_fabric_configfs *,
|
||||||
struct config_group *, const char *);
|
struct config_group *, const char *);
|
||||||
void (*fabric_drop_wwn)(struct se_wwn *);
|
void (*fabric_drop_wwn)(struct se_wwn *);
|
||||||
|
void (*add_wwn_groups)(struct se_wwn *);
|
||||||
struct se_portal_group *(*fabric_make_tpg)(struct se_wwn *,
|
struct se_portal_group *(*fabric_make_tpg)(struct se_wwn *,
|
||||||
struct config_group *, const char *);
|
struct config_group *, const char *);
|
||||||
void (*fabric_drop_tpg)(struct se_portal_group *);
|
void (*fabric_drop_tpg)(struct se_portal_group *);
|
||||||
|
|
Loading…
Reference in a new issue