summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTung Nguyen <tung.q.nguyen@dektech.com.au>2020-07-21 04:57:05 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-07-31 19:47:16 +0300
commitaac87e7ce02c19250c55e2d6d3559f3d01634e80 (patch)
tree3f944245dbb219eb8b0596320ddc45377f9d0d6e
parent393de7e6d4227653948f0e81e27f02b95faa4cd0 (diff)
downloadlinux-aac87e7ce02c19250c55e2d6d3559f3d01634e80.tar.xz
tipc: allow to build NACK message in link timeout function
[ Upstream commit 6ef9dcb78046b346b5508ca1659848b136a343c2 ] Commit 02288248b051 ("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: 02288248b051 ("tipc: eliminate gap indicator from ACK messages") Acked-by: Jon Maloy <jmaloy@redhat.com> Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--net/tipc/link.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c
index d4675e922a8f..e18369201a15 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -813,11 +813,11 @@ int tipc_link_timeout(struct tipc_link *l, struct sk_buff_head *xmitq)
state |= l->bc_rcvlink->rcv_unacked;
state |= l->rcv_unacked;
state |= !skb_queue_empty(&l->transmq);
- state |= !skb_queue_empty(&l->deferdq);
probe = mstate->probing;
probe |= l->silent_intv_cnt;
if (probe || mstate->monitoring)
l->silent_intv_cnt++;
+ probe |= !skb_queue_empty(&l->deferdq);
if (l->snd_nxt == l->checkpoint) {
tipc_link_update_cwin(l, 0, 0);
probe = true;