diff options
Diffstat (limited to 'net/tipc')
| -rw-r--r-- | net/tipc/group.c | 1 | ||||
| -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 | 
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)  	rbtree_postorder_for_each_entry_safe(m, tmp, tree, tree_node) {  		tipc_group_proto_xmit(grp, m, GRP_LEAVE_MSG, &xmitq); +		__skb_queue_purge(&m->deferredq);  		list_del(&m->list);  		kfree(m);  	} 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,  	 * node has entered SELF_DOWN_PEER_LEAVING and both peer nodes  	 * would have to start over from scratch instead.  	 */ -	WARN_ON(l && tipc_link_is_up(l));  	tnl->drop_point = 1;  	tnl->failover_reasm_skb = NULL; 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,   *	   disturbance, wrong session, etc.)   *	3. Link <1B-2B> up   *	4. Link endpoint 2A down (e.g. due to link tolerance timeout) - *	5. Node B starts failover onto link <1B-2B> + *	5. Node 2 starts failover onto link <1B-2B>   * - *	==> Node A does never start link/node failover! + *	==> Node 1 does never start link/node failover!   *   * @n: tipc node structure   * @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,  	if (!tipc_link_is_up(tnl))  		return; +	/* Don't rush, failure link may be in the process of resetting */ +	if (l && !tipc_link_is_reset(l)) +		return; +  	tipc_link_fsm_evt(tnl, LINK_SYNCH_END_EVT);  	tipc_node_fsm_evt(n, NODE_SYNCH_END_EVT); @@ -1706,7 +1710,7 @@ static bool tipc_node_check_state(struct tipc_node *n, struct sk_buff *skb,  	/* Initiate or update failover mode if applicable */  	if ((usr == TUNNEL_PROTOCOL) && (mtyp == FAILOVER_MSG)) {  		syncpt = oseqno + exp_pkts - 1; -		if (pl && tipc_link_is_up(pl)) { +		if (pl && !tipc_link_is_reset(pl)) {  			__tipc_node_link_down(n, &pb_id, xmitq, &maddr);  			trace_tipc_node_link_down(n, true,  						  "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,  			goto tx_error;  		} -		skb->dev = rt->dst.dev;  		ttl = ip4_dst_hoplimit(&rt->dst);  		udp_tunnel_xmit_skb(rt, ub->ubsock->sk, skb, src->ipv4.s_addr,  				    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,  		if (err)  			goto tx_error;  		ttl = ip6_dst_hoplimit(ndst); -		err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb, -					   ndst->dev, &src->ipv6, -					   &dst->ipv6, 0, ttl, 0, src->port, -					   dst->port, false); +		err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb, NULL, +					   &src->ipv6, &dst->ipv6, 0, ttl, 0, +					   src->port, dst->port, false);  #endif  	}  	return err; | 
