summaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/group.c1
-rw-r--r--net/tipc/link.c1
-rw-r--r--net/tipc/node.c10
-rw-r--r--net/tipc/udp_media.c8
4 files changed, 11 insertions, 9 deletions
diff --git a/net/tipc/group.c b/net/tipc/group.c
index 992be6113676..5f98d38bcf08 100644
--- a/net/tipc/group.c
+++ b/net/tipc/group.c
@@ -218,6 +218,7 @@ void tipc_group_delete(struct net *net, struct tipc_group *grp)
218 218
219 rbtree_postorder_for_each_entry_safe(m, tmp, tree, tree_node) { 219 rbtree_postorder_for_each_entry_safe(m, tmp, tree, tree_node) {
220 tipc_group_proto_xmit(grp, m, GRP_LEAVE_MSG, &xmitq); 220 tipc_group_proto_xmit(grp, m, GRP_LEAVE_MSG, &xmitq);
221 __skb_queue_purge(&m->deferredq);
221 list_del(&m->list); 222 list_del(&m->list);
222 kfree(m); 223 kfree(m);
223 } 224 }
diff --git a/net/tipc/link.c b/net/tipc/link.c
index f5cd986e1e50..2050fd386642 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -1728,7 +1728,6 @@ void tipc_link_failover_prepare(struct tipc_link *l, struct tipc_link *tnl,
1728 * node has entered SELF_DOWN_PEER_LEAVING and both peer nodes 1728 * node has entered SELF_DOWN_PEER_LEAVING and both peer nodes
1729 * would have to start over from scratch instead. 1729 * would have to start over from scratch instead.
1730 */ 1730 */
1731 WARN_ON(l && tipc_link_is_up(l));
1732 tnl->drop_point = 1; 1731 tnl->drop_point = 1;
1733 tnl->failover_reasm_skb = NULL; 1732 tnl->failover_reasm_skb = NULL;
1734 1733
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;