diff options
Diffstat (limited to 'net/tipc')
-rw-r--r-- | net/tipc/link.c | 1 | ||||
-rw-r--r-- | net/tipc/node.c | 10 | ||||
-rw-r--r-- | net/tipc/udp_media.c | 8 |
3 files changed, 10 insertions, 9 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c index d5ed509e0660..bcfb0a4ab485 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
@@ -1762,7 +1762,6 @@ void tipc_link_failover_prepare(struct tipc_link *l, struct tipc_link *tnl, | |||
1762 | * node has entered SELF_DOWN_PEER_LEAVING and both peer nodes | 1762 | * node has entered SELF_DOWN_PEER_LEAVING and both peer nodes |
1763 | * would have to start over from scratch instead. | 1763 | * would have to start over from scratch instead. |
1764 | */ | 1764 | */ |
1765 | WARN_ON(l && tipc_link_is_up(l)); | ||
1766 | tnl->drop_point = 1; | 1765 | tnl->drop_point = 1; |
1767 | tnl->failover_reasm_skb = NULL; | 1766 | tnl->failover_reasm_skb = NULL; |
1768 | 1767 | ||
diff --git a/net/tipc/node.c b/net/tipc/node.c index 9e106d3ed187..550581d47d51 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c | |||
@@ -766,9 +766,9 @@ static void tipc_node_link_up(struct tipc_node *n, int bearer_id, | |||
766 | * disturbance, wrong session, etc.) | 766 | * disturbance, wrong session, etc.) |
767 | * 3. Link <1B-2B> up | 767 | * 3. Link <1B-2B> up |
768 | * 4. Link endpoint 2A down (e.g. due to link tolerance timeout) | 768 | * 4. Link endpoint 2A down (e.g. due to link tolerance timeout) |
769 | * 5. Node B starts failover onto link <1B-2B> | 769 | * 5. Node 2 starts failover onto link <1B-2B> |
770 | * | 770 | * |
771 | * ==> Node A does never start link/node failover! | 771 | * ==> Node 1 does never start link/node failover! |
772 | * | 772 | * |
773 | * @n: tipc node structure | 773 | * @n: tipc node structure |
774 | * @l: link peer endpoint failingover (- can be NULL) | 774 | * @l: link peer endpoint failingover (- can be NULL) |
@@ -783,6 +783,10 @@ static void tipc_node_link_failover(struct tipc_node *n, struct tipc_link *l, | |||
783 | if (!tipc_link_is_up(tnl)) | 783 | if (!tipc_link_is_up(tnl)) |
784 | return; | 784 | return; |
785 | 785 | ||
786 | /* Don't rush, failure link may be in the process of resetting */ | ||
787 | if (l && !tipc_link_is_reset(l)) | ||
788 | return; | ||
789 | |||
786 | tipc_link_fsm_evt(tnl, LINK_SYNCH_END_EVT); | 790 | tipc_link_fsm_evt(tnl, LINK_SYNCH_END_EVT); |
787 | tipc_node_fsm_evt(n, NODE_SYNCH_END_EVT); | 791 | tipc_node_fsm_evt(n, NODE_SYNCH_END_EVT); |
788 | 792 | ||
@@ -1706,7 +1710,7 @@ static bool tipc_node_check_state(struct tipc_node *n, struct sk_buff *skb, | |||
1706 | /* Initiate or update failover mode if applicable */ | 1710 | /* Initiate or update failover mode if applicable */ |
1707 | if ((usr == TUNNEL_PROTOCOL) && (mtyp == FAILOVER_MSG)) { | 1711 | if ((usr == TUNNEL_PROTOCOL) && (mtyp == FAILOVER_MSG)) { |
1708 | syncpt = oseqno + exp_pkts - 1; | 1712 | syncpt = oseqno + exp_pkts - 1; |
1709 | if (pl && tipc_link_is_up(pl)) { | 1713 | if (pl && !tipc_link_is_reset(pl)) { |
1710 | __tipc_node_link_down(n, &pb_id, xmitq, &maddr); | 1714 | __tipc_node_link_down(n, &pb_id, xmitq, &maddr); |
1711 | trace_tipc_node_link_down(n, true, | 1715 | trace_tipc_node_link_down(n, true, |
1712 | "node link down <- failover!"); | 1716 | "node link down <- failover!"); |
diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c index 7fc02d84c4f1..1405ccc9101c 100644 --- a/net/tipc/udp_media.c +++ b/net/tipc/udp_media.c | |||
@@ -176,7 +176,6 @@ static int tipc_udp_xmit(struct net *net, struct sk_buff *skb, | |||
176 | goto tx_error; | 176 | goto tx_error; |
177 | } | 177 | } |
178 | 178 | ||
179 | skb->dev = rt->dst.dev; | ||
180 | ttl = ip4_dst_hoplimit(&rt->dst); | 179 | ttl = ip4_dst_hoplimit(&rt->dst); |
181 | udp_tunnel_xmit_skb(rt, ub->ubsock->sk, skb, src->ipv4.s_addr, | 180 | udp_tunnel_xmit_skb(rt, ub->ubsock->sk, skb, src->ipv4.s_addr, |
182 | dst->ipv4.s_addr, 0, ttl, 0, src->port, | 181 | dst->ipv4.s_addr, 0, ttl, 0, src->port, |
@@ -195,10 +194,9 @@ static int tipc_udp_xmit(struct net *net, struct sk_buff *skb, | |||
195 | if (err) | 194 | if (err) |
196 | goto tx_error; | 195 | goto tx_error; |
197 | ttl = ip6_dst_hoplimit(ndst); | 196 | ttl = ip6_dst_hoplimit(ndst); |
198 | err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb, | 197 | err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb, NULL, |
199 | ndst->dev, &src->ipv6, | 198 | &src->ipv6, &dst->ipv6, 0, ttl, 0, |
200 | &dst->ipv6, 0, ttl, 0, src->port, | 199 | src->port, dst->port, false); |
201 | dst->port, false); | ||
202 | #endif | 200 | #endif |
203 | } | 201 | } |
204 | return err; | 202 | return err; |