From 974a5a864bf959b7f3412a31ee8ce001c6628451 Mon Sep 17 00:00:00 2001 From: Allan Stephens Date: Wed, 18 Apr 2012 09:12:09 -0400 Subject: tipc: take lock while updating node network address The routine that changes the node's network address now takes TIPC's network lock in write mode while the main address variable and associated data structures are being changed; this is needed to ensure that the link subsystem won't attempt to send a message off-node until the sending port's message header template has been updated with the node's new network address. Signed-off-by: Allan Stephens Signed-off-by: Paul Gortmaker --- net/tipc/net.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'net/tipc/net.c') diff --git a/net/tipc/net.c b/net/tipc/net.c index d4531b07076c..5fab4ff24a94 100644 --- a/net/tipc/net.c +++ b/net/tipc/net.c @@ -178,11 +178,12 @@ int tipc_net_start(u32 addr) tipc_subscr_stop(); tipc_cfg_stop(); + write_lock_bh(&tipc_net_lock); tipc_own_addr = addr; tipc_named_reinit(); tipc_port_reinit(); - tipc_bclink_init(); + write_unlock_bh(&tipc_net_lock); tipc_k_signal((Handler)tipc_subscr_start, 0); tipc_k_signal((Handler)tipc_cfg_init, 0); -- cgit v1.2.3 From a2cfd45b52006893fc0d0e850d187d30f86a39dc Mon Sep 17 00:00:00 2001 From: Allan Stephens Date: Thu, 26 Apr 2012 16:46:29 -0400 Subject: tipc: Optimize re-initialization of configuration service Streamlines the job of re-initializing TIPC's configuration service when a node's network address is first assigned. Rather than destroying the configuration server port and then recreating it, TIPC now simply withdraws the existing {0,<0.0.0>} name publication and creates a new {0,} name publication that identifies the node's network address to interested subscribers. Signed-off-by: Allan Stephens Signed-off-by: Paul Gortmaker --- net/tipc/net.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'net/tipc/net.c') diff --git a/net/tipc/net.c b/net/tipc/net.c index 5fab4ff24a94..f4a490b0cf4c 100644 --- a/net/tipc/net.c +++ b/net/tipc/net.c @@ -176,7 +176,6 @@ int tipc_net_start(u32 addr) char addr_string[16]; tipc_subscr_stop(); - tipc_cfg_stop(); write_lock_bh(&tipc_net_lock); tipc_own_addr = addr; @@ -186,7 +185,7 @@ int tipc_net_start(u32 addr) write_unlock_bh(&tipc_net_lock); tipc_k_signal((Handler)tipc_subscr_start, 0); - tipc_k_signal((Handler)tipc_cfg_init, 0); + tipc_cfg_reinit(); info("Started in network mode\n"); info("Own node address %s, network identity %u\n", -- cgit v1.2.3 From eb3865a99dc38396a403ef82f99f4c51dd34f0bf Mon Sep 17 00:00:00 2001 From: Allan Stephens Date: Thu, 26 Apr 2012 17:21:49 -0400 Subject: tipc: Enhance re-initialization of network topology service Streamlines the job of re-initializing TIPC's network topology service when a node's network address is first assigned. Rather than destroying the topology server port and breaking its connections to existing subscribers, TIPC now simply lets the service continue running (since the change to the port identifier of each port used by the topology service no longer impacts the flow of messages between the service and its subscribers). This enhancement means that applications that utilize the topology service prior to the assignment of TIPC's network address no longer need to re-establish their subscriptions when the address is finally assigned. However, it is worth noting that any subsequent events for existing subscriptions report the new port identifier of the publishing port, rather than the original port identifier. (For example, a name that was previously reported as being published by <0.0.0:ref> may be subsequently withdrawn by .) This doesn't impact any of the existing known userspace in tipc-utils, since (a) TIPC continues to treat references to the original port ID correctly and (b) normal use cases assign an address before active use. However if there does happen to be some rare/custom application out there that was relying on this, they can simply bypass the enhancement by issuing a subscription to {0,0} and break its connection to the topology service, if an associated withdrawal event occurs. Signed-off-by: Allan Stephens Signed-off-by: Paul Gortmaker --- net/tipc/net.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'net/tipc/net.c') diff --git a/net/tipc/net.c b/net/tipc/net.c index f4a490b0cf4c..7c236c89cf5e 100644 --- a/net/tipc/net.c +++ b/net/tipc/net.c @@ -175,8 +175,6 @@ int tipc_net_start(u32 addr) { char addr_string[16]; - tipc_subscr_stop(); - write_lock_bh(&tipc_net_lock); tipc_own_addr = addr; tipc_named_reinit(); @@ -184,7 +182,6 @@ int tipc_net_start(u32 addr) tipc_bclink_init(); write_unlock_bh(&tipc_net_lock); - tipc_k_signal((Handler)tipc_subscr_start, 0); tipc_cfg_reinit(); info("Started in network mode\n"); -- cgit v1.2.3