mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
f006c9c70f
When a link is reset, and there is a redundant link available, all sender sockets will steer their subsequent traffic through the remaining link. In order to guarantee preserved packet order and cardinality during the transition, we tunnel the failing link's send queue through the remaining link before we allow any sockets to use it. In this commit, we change the algorithm for receiving failover ("ORIGINAL_MSG") packets in tipc_link_tunnel_rcv(), at the same time delegating it to a new subfuncton, tipc_link_failover_rcv(). Instead of directly returning an extracted inner packet to the packet reception loop in tipc_rcv(), we first check if it is a message fragment, in which case we append it to the reset link's fragment chain. If the fragment chain is complete, we return the whole chain instead of the individual buffer, eliminating any need for the tipc_rcv() loop to do reassembly of tunneled packets. This change makes it possible to further simplify tipc_link_tunnel_rcv(), as well as the calling tipc_rcv() loop. We will do that in later commits. It also makes it possible to identify a single spot in the code where we can tell that a failover procedure is finished, something that is useful when we are deleting links after a failover. This will also be done in a later commit. Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Reviewed-by: Ying Xue <ying.xue@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net> |
||
---|---|---|
.. | ||
addr.c | ||
addr.h | ||
bcast.c | ||
bcast.h | ||
bearer.c | ||
bearer.h | ||
config.c | ||
config.h | ||
core.c | ||
core.h | ||
discover.c | ||
discover.h | ||
eth_media.c | ||
handler.c | ||
ib_media.c | ||
Kconfig | ||
link.c | ||
link.h | ||
log.c | ||
Makefile | ||
msg.c | ||
msg.h | ||
name_distr.c | ||
name_distr.h | ||
name_table.c | ||
name_table.h | ||
net.c | ||
net.h | ||
netlink.c | ||
node.c | ||
node.h | ||
node_subscr.c | ||
node_subscr.h | ||
port.c | ||
port.h | ||
ref.c | ||
ref.h | ||
server.c | ||
server.h | ||
socket.c | ||
subscr.c | ||
subscr.h | ||
sysctl.c |