Commit 68ad785c authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'tipc'



Ying Xue says:

====================
tipc: clean up components initialization code

In this series, we will fix a regression issue involved by commit
6e967adf(tipc: relocate common functions from media to bearer)
But before the issue is fixed, we firstly adjust the process of
components initialization so as to remove all enabled flags from
necessary tipc components. Otherwise, without the change, we also
have to add an extra enabled flag into bearer layer indicating
whether bearer setup is finshed or not.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 7cce3b75 970122fd
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -610,8 +610,13 @@ static struct notifier_block notifier = {

int tipc_bearer_setup(void)
{
	int err;

	err = register_netdevice_notifier(&notifier);
	if (err)
		return err;
	dev_add_pack(&tipc_packet_type);
	return register_netdevice_notifier(&notifier);
	return 0;
}

void tipc_bearer_cleanup(void)
+1 −1
Original line number Diff line number Diff line
@@ -181,7 +181,7 @@ static struct sk_buff *cfg_set_own_addr(void)
	if (tipc_own_addr)
		return tipc_cfg_reply_error_string(TIPC_CFG_NOT_SUPPORTED
						   " (cannot change node address once assigned)");
	tipc_core_start_net(addr);
	tipc_net_start(addr);
	return tipc_cfg_reply_none();
}

+59 −50
Original line number Diff line number Diff line
@@ -76,38 +76,14 @@ struct sk_buff *tipc_buf_acquire(u32 size)
	return skb;
}

/**
 * tipc_core_stop_net - shut down TIPC networking sub-systems
 */
static void tipc_core_stop_net(void)
{
	tipc_net_stop();
	tipc_bearer_cleanup();
}

/**
 * start_net - start TIPC networking sub-systems
 */
int tipc_core_start_net(unsigned long addr)
{
	int res;

	tipc_net_start(addr);
	res = tipc_bearer_setup();
	if (res < 0)
		goto err;
	return res;

err:
	tipc_core_stop_net();
	return res;
}

/**
 * tipc_core_stop - switch TIPC from SINGLE NODE to NOT RUNNING mode
 */
static void tipc_core_stop(void)
{
	tipc_handler_stop();
	tipc_net_stop();
	tipc_bearer_cleanup();
	tipc_netlink_stop();
	tipc_cfg_stop();
	tipc_subscr_stop();
@@ -122,30 +98,65 @@ static void tipc_core_stop(void)
 */
static int tipc_core_start(void)
{
	int res;
	int err;

	get_random_bytes(&tipc_random, sizeof(tipc_random));

	res = tipc_handler_start();
	if (!res)
		res = tipc_ref_table_init(tipc_max_ports, tipc_random);
	if (!res)
		res = tipc_nametbl_init();
	if (!res)
		res = tipc_netlink_start();
	if (!res)
		res = tipc_socket_init();
	if (!res)
		res = tipc_register_sysctl();
	if (!res)
		res = tipc_subscr_start();
	if (!res)
		res = tipc_cfg_init();
	if (res) {
	err = tipc_handler_start();
	if (err)
		goto out_handler;

	err = tipc_ref_table_init(tipc_max_ports, tipc_random);
	if (err)
		goto out_reftbl;

	err = tipc_nametbl_init();
	if (err)
		goto out_nametbl;

	err = tipc_netlink_start();
	if (err)
		goto out_netlink;

	err = tipc_socket_init();
	if (err)
		goto out_socket;

	err = tipc_register_sysctl();
	if (err)
		goto out_sysctl;

	err = tipc_subscr_start();
	if (err)
		goto out_subscr;

	err = tipc_cfg_init();
	if (err)
		goto out_cfg;

	err = tipc_bearer_setup();
	if (err)
		goto out_bearer;

	return 0;
out_bearer:
	tipc_cfg_stop();
out_cfg:
	tipc_subscr_stop();
out_subscr:
	tipc_unregister_sysctl();
out_sysctl:
	tipc_socket_stop();
out_socket:
	tipc_netlink_stop();
out_netlink:
	tipc_nametbl_stop();
out_nametbl:
	tipc_ref_table_stop();
out_reftbl:
	tipc_handler_stop();
		tipc_core_stop();
	}
	return res;
out_handler:
	return err;
}

static int __init tipc_init(void)
@@ -174,8 +185,6 @@ static int __init tipc_init(void)

static void __exit tipc_exit(void)
{
	tipc_handler_stop();
	tipc_core_stop_net();
	tipc_core_stop();
	pr_info("Deactivated\n");
}
+0 −1
Original line number Diff line number Diff line
@@ -90,7 +90,6 @@ extern int tipc_random __read_mostly;
/*
 * Routines available to privileged subsystems
 */
int tipc_core_start_net(unsigned long);
int tipc_handler_start(void);
void tipc_handler_stop(void);
int tipc_netlink_start(void);
+0 −3
Original line number Diff line number Diff line
@@ -945,9 +945,6 @@ void tipc_nametbl_stop(void)
{
	u32 i;

	if (!table.types)
		return;

	/* Verify name table is empty, then release it */
	write_lock_bh(&tipc_nametbl_lock);
	for (i = 0; i < TIPC_NAMETBL_SIZE; i++) {
Loading