tipc: allow connection shutdown callback to be invoked in advance
authorYing Xue <ying.xue@windriver.com>
Thu, 6 Mar 2014 13:40:16 +0000 (14:40 +0100)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Wed, 7 May 2014 06:30:56 +0000 (15:30 +0900)
commit881f6d703a5c2e162c032d346f39e65d46f49ba6
treefee0e81dc5645cd7a2f60fb6e249762f315ccd1a
parent0e6986ba7b8d6fcbaace946883635b36286917a6
tipc: allow connection shutdown callback to be invoked in advance

[ Upstream commit 6d4ebeb4df0176b1973875840a9f7e91394c0685 ]

Currently connection shutdown callback function is called when
connection instance is released in tipc_conn_kref_release(), and
receiving packets and sending packets are running in different
threads. Even if connection is closed by the thread of receiving
packets, its shutdown callback may not be called immediately as
the connection reference count is non-zero at that moment. So,
although the connection is shut down by the thread of receiving
packets, the thread of sending packets doesn't know it. Before
its shutdown callback is invoked to tell the sending thread its
connection has been closed, the sending thread may deliver
messages by tipc_conn_sendmsg(), this is why the following error
information appears:

"Sending subscription event failed, no memory"

To eliminate it, allow connection shutdown callback function to
be called before connection id is removed in tipc_close_conn(),
which makes the sending thread know the truth in time that its
socket is closed so that it doesn't send message to it. We also
remove the "Sending XXX failed..." error reporting for topology
and config services.

Signed-off-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: Erik Hugne <erik.hugne@ericsson.com>
Reviewed-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
net/tipc/config.c
net/tipc/server.c
net/tipc/subscr.c