linux/net/tipc
Jon Paul Maloy 2d72d49553 tipc: add reference count to struct tipc_link
When a bearer is disabled, all pertaining links will be reset and
deleted. However, if there is a second active link towards a killed
link's destination, the delete has to be postponed until the failover
is finished. During this interval, we currently put the link in zombie
mode, i.e., we take it out of traffic, delete its timer, but leave it
attached to the owner node structure until all missing packets have
been received.  When this is done, we detach the link from its node
and delete it, assuming that the synchronous timer deletion that was
initiated earlier in a different thread has finished.

This is unsafe, as the failover may finish before del_timer_sync()
has returned in the other thread.

We fix this by adding an atomic reference counter of type kref in
struct tipc_link. The counter keeps track of the references kept
to the link by the owner node and the timer. We then do a conditional
delete, based on the reference counter, both after the failover has
been finished and when the timer expires, if applicable. Whoever
comes last, will actually delete the link. This approach also implies
that we can make the deletion of the timer asynchronous.

Reviewed-by: Erik Hugne <erik.hugne@ericsson.com>
Reviewed-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-02-04 16:09:31 -08:00
..
addr.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
addr.h tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
bcast.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
bcast.h tipc: make tipc broadcast link support net namespace 2015-01-12 16:24:33 -05:00
bearer.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
bearer.h tipc: make tipc broadcast link support net namespace 2015-01-12 16:24:33 -05:00
config.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
config.h tipc: involve namespace infrastructure 2015-01-12 16:24:32 -05:00
core.c tipc: make tipc random value aware of net namespace 2015-01-12 16:24:33 -05:00
core.h tipc: make tipc random value aware of net namespace 2015-01-12 16:24:33 -05:00
discover.c tipc: make tipc random value aware of net namespace 2015-01-12 16:24:33 -05:00
discover.h tipc: involve namespace infrastructure 2015-01-12 16:24:32 -05:00
eth_media.c tipc: improve and extend media address conversion functions 2014-05-14 15:19:48 -04:00
ib_media.c tipc: improve and extend media address conversion functions 2014-05-14 15:19:48 -04:00
Kconfig tipc: convert tipc reference table to use generic rhashtable 2015-01-08 19:47:14 -08:00
link.c tipc: add reference count to struct tipc_link 2015-02-04 16:09:31 -08:00
link.h tipc: add reference count to struct tipc_link 2015-02-04 16:09:31 -08:00
log.c tipc: remove print_buf and deprecated log buffer code 2012-07-13 19:34:43 -04:00
Makefile tipc: remove node subscription infrastructure 2014-11-26 12:30:16 -05:00
msg.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
msg.h tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
name_distr.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
name_distr.h tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
name_table.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
name_table.h tipc: name tipc name table support net namespace 2015-01-12 16:24:33 -05:00
net.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
net.h tipc: make tipc node table aware of net namespace 2015-01-12 16:24:32 -05:00
netlink.c tipc: make netlink support net namespace 2015-01-12 16:24:34 -05:00
netlink.h tipc: cleanup core.c and core.h files 2015-01-12 16:24:31 -05:00
node.c tipc: fix excessive network event logging 2015-01-26 16:58:08 -08:00
node.h tipc: make tipc node table aware of net namespace 2015-01-12 16:24:32 -05:00
server.c tipc: make subscriber server support net namespace 2015-01-12 16:24:33 -05:00
server.h tipc: make subscriber server support net namespace 2015-01-12 16:24:33 -05:00
socket.c tipc: fix socket list regression in new nl api 2015-01-18 00:27:05 -05:00
socket.h tipc: make subscriber server support net namespace 2015-01-12 16:24:33 -05:00
subscr.c tipc: make subscriber server support net namespace 2015-01-12 16:24:33 -05:00
subscr.h tipc: make subscriber server support net namespace 2015-01-12 16:24:33 -05:00
sysctl.c tipc: add name distributor resiliency queue 2014-09-01 17:51:48 -07:00