Commit 6ef9dcb7 authored by Tung Nguyen's avatar Tung Nguyen Committed by David S. Miller

tipc: allow to build NACK message in link timeout function

Commit 02288248 ("tipc: eliminate gap indicator from ACK messages")
eliminated sending of the 'gap' indicator in regular ACK messages and
only allowed to build NACK message with enabled probe/probe_reply.
However, necessary correction for building NACK message was missed
in tipc_link_timeout() function. This leads to significant delay and
link reset (due to retransmission failure) in lossy environment.

This commit fixes it by setting the 'probe' flag to 'true' when
the receive deferred queue is not empty. As a result, NACK message
will be built to send back to another peer.

Fixes: 02288248 ("tipc: eliminate gap indicator from ACK messages")
Acked-by: default avatarJon Maloy <jmaloy@redhat.com>
Signed-off-by: default avatarTung Nguyen <tung.q.nguyen@dektech.com.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent db44c60c
...@@ -827,11 +827,11 @@ int tipc_link_timeout(struct tipc_link *l, struct sk_buff_head *xmitq) ...@@ -827,11 +827,11 @@ int tipc_link_timeout(struct tipc_link *l, struct sk_buff_head *xmitq)
state |= l->bc_rcvlink->rcv_unacked; state |= l->bc_rcvlink->rcv_unacked;
state |= l->rcv_unacked; state |= l->rcv_unacked;
state |= !skb_queue_empty(&l->transmq); state |= !skb_queue_empty(&l->transmq);
state |= !skb_queue_empty(&l->deferdq);
probe = mstate->probing; probe = mstate->probing;
probe |= l->silent_intv_cnt; probe |= l->silent_intv_cnt;
if (probe || mstate->monitoring) if (probe || mstate->monitoring)
l->silent_intv_cnt++; l->silent_intv_cnt++;
probe |= !skb_queue_empty(&l->deferdq);
if (l->snd_nxt == l->checkpoint) { if (l->snd_nxt == l->checkpoint) {
tipc_link_update_cwin(l, 0, 0); tipc_link_update_cwin(l, 0, 0);
probe = true; probe = true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment