netconsole: make all dynamic netconsoles share a mutex
Currently, each dynamic netconsole_target uses its own separate mutex to synchronize the configuration operations. This patch replaces the per-netconsole_target mutexes with a single mutex - dynamic_netconsole_mutex. The reduced granularity doesn't hurt anything, the code is minutely simpler and this'd allow adding operations which should be synchronized across all dynamic netconsoles. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: David Miller <davem@davemloft.net> Cc: Kay Sievers <kay@vrfy.org> Cc: Petr Mladek <pmladek@suse.cz> Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
698cf1c616
commit
369e5a8881
@@ -105,13 +105,13 @@ struct netconsole_target {
|
|||||||
struct config_item item;
|
struct config_item item;
|
||||||
#endif
|
#endif
|
||||||
bool enabled;
|
bool enabled;
|
||||||
struct mutex mutex;
|
|
||||||
struct netpoll np;
|
struct netpoll np;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_NETCONSOLE_DYNAMIC
|
#ifdef CONFIG_NETCONSOLE_DYNAMIC
|
||||||
|
|
||||||
static struct configfs_subsystem netconsole_subsys;
|
static struct configfs_subsystem netconsole_subsys;
|
||||||
|
static DEFINE_MUTEX(dynamic_netconsole_mutex);
|
||||||
|
|
||||||
static int __init dynamic_netconsole_init(void)
|
static int __init dynamic_netconsole_init(void)
|
||||||
{
|
{
|
||||||
@@ -185,7 +185,6 @@ static struct netconsole_target *alloc_param_target(char *target_config)
|
|||||||
strlcpy(nt->np.dev_name, "eth0", IFNAMSIZ);
|
strlcpy(nt->np.dev_name, "eth0", IFNAMSIZ);
|
||||||
nt->np.local_port = 6665;
|
nt->np.local_port = 6665;
|
||||||
nt->np.remote_port = 6666;
|
nt->np.remote_port = 6666;
|
||||||
mutex_init(&nt->mutex);
|
|
||||||
eth_broadcast_addr(nt->np.remote_mac);
|
eth_broadcast_addr(nt->np.remote_mac);
|
||||||
|
|
||||||
/* Parse parameters and setup netpoll */
|
/* Parse parameters and setup netpoll */
|
||||||
@@ -562,10 +561,10 @@ static ssize_t netconsole_target_attr_store(struct config_item *item,
|
|||||||
struct netconsole_target_attr *na =
|
struct netconsole_target_attr *na =
|
||||||
container_of(attr, struct netconsole_target_attr, attr);
|
container_of(attr, struct netconsole_target_attr, attr);
|
||||||
|
|
||||||
mutex_lock(&nt->mutex);
|
mutex_lock(&dynamic_netconsole_mutex);
|
||||||
if (na->store)
|
if (na->store)
|
||||||
ret = na->store(nt, buf, count);
|
ret = na->store(nt, buf, count);
|
||||||
mutex_unlock(&nt->mutex);
|
mutex_unlock(&dynamic_netconsole_mutex);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -604,7 +603,6 @@ static struct config_item *make_netconsole_target(struct config_group *group,
|
|||||||
strlcpy(nt->np.dev_name, "eth0", IFNAMSIZ);
|
strlcpy(nt->np.dev_name, "eth0", IFNAMSIZ);
|
||||||
nt->np.local_port = 6665;
|
nt->np.local_port = 6665;
|
||||||
nt->np.remote_port = 6666;
|
nt->np.remote_port = 6666;
|
||||||
mutex_init(&nt->mutex);
|
|
||||||
eth_broadcast_addr(nt->np.remote_mac);
|
eth_broadcast_addr(nt->np.remote_mac);
|
||||||
|
|
||||||
/* Initialize the config_item member */
|
/* Initialize the config_item member */
|
||||||
|
|||||||
Reference in New Issue
Block a user