diff options
Diffstat (limited to 'net/tipc/bcast.c')
-rw-r--r-- | net/tipc/bcast.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c index 753f774cb46f..aa1babbea385 100644 --- a/net/tipc/bcast.c +++ b/net/tipc/bcast.c | |||
@@ -247,11 +247,17 @@ int tipc_bcast_rcv(struct net *net, struct tipc_link *l, struct sk_buff *skb) | |||
247 | * | 247 | * |
248 | * RCU is locked, no other locks set | 248 | * RCU is locked, no other locks set |
249 | */ | 249 | */ |
250 | void tipc_bcast_ack_rcv(struct net *net, struct tipc_link *l, u32 acked) | 250 | void tipc_bcast_ack_rcv(struct net *net, struct tipc_link *l, |
251 | struct tipc_msg *hdr) | ||
251 | { | 252 | { |
252 | struct sk_buff_head *inputq = &tipc_bc_base(net)->inputq; | 253 | struct sk_buff_head *inputq = &tipc_bc_base(net)->inputq; |
254 | u16 acked = msg_bcast_ack(hdr); | ||
253 | struct sk_buff_head xmitq; | 255 | struct sk_buff_head xmitq; |
254 | 256 | ||
257 | /* Ignore bc acks sent by peer before bcast synch point was received */ | ||
258 | if (msg_bc_ack_invalid(hdr)) | ||
259 | return; | ||
260 | |||
255 | __skb_queue_head_init(&xmitq); | 261 | __skb_queue_head_init(&xmitq); |
256 | 262 | ||
257 | tipc_bcast_lock(net); | 263 | tipc_bcast_lock(net); |
@@ -279,11 +285,11 @@ int tipc_bcast_sync_rcv(struct net *net, struct tipc_link *l, | |||
279 | __skb_queue_head_init(&xmitq); | 285 | __skb_queue_head_init(&xmitq); |
280 | 286 | ||
281 | tipc_bcast_lock(net); | 287 | tipc_bcast_lock(net); |
282 | if (msg_type(hdr) == STATE_MSG) { | 288 | if (msg_type(hdr) != STATE_MSG) { |
289 | tipc_link_bc_init_rcv(l, hdr); | ||
290 | } else if (!msg_bc_ack_invalid(hdr)) { | ||
283 | tipc_link_bc_ack_rcv(l, msg_bcast_ack(hdr), &xmitq); | 291 | tipc_link_bc_ack_rcv(l, msg_bcast_ack(hdr), &xmitq); |
284 | rc = tipc_link_bc_sync_rcv(l, hdr, &xmitq); | 292 | rc = tipc_link_bc_sync_rcv(l, hdr, &xmitq); |
285 | } else { | ||
286 | tipc_link_bc_init_rcv(l, hdr); | ||
287 | } | 293 | } |
288 | tipc_bcast_unlock(net); | 294 | tipc_bcast_unlock(net); |
289 | 295 | ||