Commit bd9c69a3 authored by Matthew Wood's avatar Matthew Wood Committed by David S. Miller
Browse files

net: netconsole: move netconsole_target config_item to config_group



In order to support a nested userdata config_group in later patches,
use a config_group for netconsole_target instead of a
config_item. It's a no-op functionality-wise, since
config_group maintains all features of a config_item via the cg_item
member.

Signed-off-by: default avatarMatthew Wood <thepacketgeek@gmail.com>
Reviewed-by: default avatarBreno Leitao <leitao@debian.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 602ad3b4
Loading
Loading
Loading
Loading
+31 −27
Original line number Diff line number Diff line
@@ -79,7 +79,7 @@ static struct console netconsole_ext;
/**
 * struct netconsole_target - Represents a configured netconsole target.
 * @list:	Links this target into the target_list.
 * @item:	Links us into the configfs subsystem hierarchy.
 * @group:	Links us into the configfs subsystem hierarchy.
 * @enabled:	On / off knob to enable / disable target.
 *		Visible from userspace (read-write).
 *		We maintain a strict 1:1 correspondence between this and
@@ -102,7 +102,7 @@ static struct console netconsole_ext;
struct netconsole_target {
	struct list_head	list;
#ifdef	CONFIG_NETCONSOLE_DYNAMIC
	struct config_item	item;
	struct config_group	group;
#endif
	bool			enabled;
	bool			extended;
@@ -134,14 +134,14 @@ static void __exit dynamic_netconsole_exit(void)
 */
static void netconsole_target_get(struct netconsole_target *nt)
{
	if (config_item_name(&nt->item))
		config_item_get(&nt->item);
	if (config_item_name(&nt->group.cg_item))
		config_group_get(&nt->group);
}

static void netconsole_target_put(struct netconsole_target *nt)
{
	if (config_item_name(&nt->item))
		config_item_put(&nt->item);
	if (config_item_name(&nt->group.cg_item))
		config_group_put(&nt->group);
}

#else	/* !CONFIG_NETCONSOLE_DYNAMIC */
@@ -221,9 +221,13 @@ static struct netconsole_target *alloc_and_init(void)

static struct netconsole_target *to_target(struct config_item *item)
{
	return item ?
		container_of(item, struct netconsole_target, item) :
		NULL;
	struct config_group *cfg_group;

	cfg_group = to_config_group(item);
	if (!cfg_group)
		return NULL;
	return container_of(to_config_group(item),
			    struct netconsole_target, group);
}

/*
@@ -370,7 +374,7 @@ static ssize_t release_store(struct config_item *item, const char *buf,
	mutex_lock(&dynamic_netconsole_mutex);
	if (nt->enabled) {
		pr_err("target (%s) is enabled, disable to update parameters\n",
		       config_item_name(&nt->item));
		       config_item_name(&nt->group.cg_item));
		err = -EINVAL;
		goto out_unlock;
	}
@@ -398,7 +402,7 @@ static ssize_t extended_store(struct config_item *item, const char *buf,
	mutex_lock(&dynamic_netconsole_mutex);
	if (nt->enabled) {
		pr_err("target (%s) is enabled, disable to update parameters\n",
		       config_item_name(&nt->item));
		       config_item_name(&nt->group.cg_item));
		err = -EINVAL;
		goto out_unlock;
	}
@@ -425,7 +429,7 @@ static ssize_t dev_name_store(struct config_item *item, const char *buf,
	mutex_lock(&dynamic_netconsole_mutex);
	if (nt->enabled) {
		pr_err("target (%s) is enabled, disable to update parameters\n",
		       config_item_name(&nt->item));
		       config_item_name(&nt->group.cg_item));
		mutex_unlock(&dynamic_netconsole_mutex);
		return -EINVAL;
	}
@@ -450,7 +454,7 @@ static ssize_t local_port_store(struct config_item *item, const char *buf,
	mutex_lock(&dynamic_netconsole_mutex);
	if (nt->enabled) {
		pr_err("target (%s) is enabled, disable to update parameters\n",
		       config_item_name(&nt->item));
		       config_item_name(&nt->group.cg_item));
		goto out_unlock;
	}

@@ -473,7 +477,7 @@ static ssize_t remote_port_store(struct config_item *item,
	mutex_lock(&dynamic_netconsole_mutex);
	if (nt->enabled) {
		pr_err("target (%s) is enabled, disable to update parameters\n",
		       config_item_name(&nt->item));
		       config_item_name(&nt->group.cg_item));
		goto out_unlock;
	}

@@ -495,7 +499,7 @@ static ssize_t local_ip_store(struct config_item *item, const char *buf,
	mutex_lock(&dynamic_netconsole_mutex);
	if (nt->enabled) {
		pr_err("target (%s) is enabled, disable to update parameters\n",
		       config_item_name(&nt->item));
		       config_item_name(&nt->group.cg_item));
		goto out_unlock;
	}

@@ -532,7 +536,7 @@ static ssize_t remote_ip_store(struct config_item *item, const char *buf,
	mutex_lock(&dynamic_netconsole_mutex);
	if (nt->enabled) {
		pr_err("target (%s) is enabled, disable to update parameters\n",
		       config_item_name(&nt->item));
		       config_item_name(&nt->group.cg_item));
		goto out_unlock;
	}

@@ -570,7 +574,7 @@ static ssize_t remote_mac_store(struct config_item *item, const char *buf,
	mutex_lock(&dynamic_netconsole_mutex);
	if (nt->enabled) {
		pr_err("target (%s) is enabled, disable to update parameters\n",
		       config_item_name(&nt->item));
		       config_item_name(&nt->group.cg_item));
		goto out_unlock;
	}

@@ -638,7 +642,7 @@ static struct netconsole_target *find_cmdline_target(const char *name)

	spin_lock_irqsave(&target_list_lock, flags);
	list_for_each_entry(nt, &target_list, list) {
		if (!strcmp(nt->item.ci_name, name)) {
		if (!strcmp(nt->group.cg_item.ci_name, name)) {
			ret = nt;
			break;
		}
@@ -652,7 +656,7 @@ static struct netconsole_target *find_cmdline_target(const char *name)
 * Group operations and type for netconsole_subsys.
 */

static struct config_item *make_netconsole_target(struct config_group *group,
static struct config_group *make_netconsole_target(struct config_group *group,
						   const char *name)
{
	struct netconsole_target *nt;
@@ -666,7 +670,7 @@ static struct config_item *make_netconsole_target(struct config_group *group,
		     strlen(NETCONSOLE_PARAM_TARGET_PREFIX))) {
		nt = find_cmdline_target(name);
		if (nt)
			return &nt->item;
			return &nt->group;
	}

	nt = alloc_and_init();
@@ -674,14 +678,14 @@ static struct config_item *make_netconsole_target(struct config_group *group,
		return ERR_PTR(-ENOMEM);

	/* Initialize the config_item member */
	config_item_init_type_name(&nt->item, name, &netconsole_target_type);
	config_group_init_type_name(&nt->group, name, &netconsole_target_type);

	/* Adding, but it is disabled */
	spin_lock_irqsave(&target_list_lock, flags);
	list_add(&nt->list, &target_list);
	spin_unlock_irqrestore(&target_list_lock, flags);

	return &nt->item;
	return &nt->group;
}

static void drop_netconsole_target(struct config_group *group,
@@ -701,11 +705,11 @@ static void drop_netconsole_target(struct config_group *group,
	if (nt->enabled)
		netpoll_cleanup(&nt->np);

	config_item_put(&nt->item);
	config_item_put(&nt->group.cg_item);
}

static struct configfs_group_operations netconsole_subsys_group_ops = {
	.make_item	= make_netconsole_target,
	.make_group	= make_netconsole_target,
	.drop_item	= drop_netconsole_target,
};

@@ -731,7 +735,7 @@ static void populate_configfs_item(struct netconsole_target *nt,

	snprintf(target_name, sizeof(target_name), "%s%d",
		 NETCONSOLE_PARAM_TARGET_PREFIX, cmdline_count);
	config_item_init_type_name(&nt->item, target_name,
	config_group_init_type_name(&nt->group, target_name,
				    &netconsole_target_type);
}