Message ID | 20200415113449.7289-1-tuong.t.lien@dektech.com.au |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net] tipc: fix incorrect increasing of link window | expand |
From: Tuong Lien <tuong.t.lien@dektech.com.au> Date: Wed, 15 Apr 2020 18:34:49 +0700 > In commit 16ad3f4022bb ("tipc: introduce variable window congestion > control"), we allow link window to change with the congestion avoidance > algorithm. However, there is a bug that during the slow-start if packet > retransmission occurs, the link will enter the fast-recovery phase, set > its window to the 'ssthresh' which is never less than 300, so the link > window suddenly increases to that limit instead of decreasing. > > Consequently, two issues have been observed: > > - For broadcast-link: it can leave a gap between the link queues that a > new packet will be inserted and sent before the previous ones, i.e. not > in-order. > > - For unicast: the algorithm does not work as expected, the link window > jumps to the slow-start threshold whereas packet retransmission occurs. > > This commit fixes the issues by avoiding such the link window increase, > but still decreasing if the 'ssthresh' is lowered. > > Fixes: 16ad3f4022bb ("tipc: introduce variable window congestion control") > Acked-by: Jon Maloy <jmaloy@redhat.com> > Signed-off-by: Tuong Lien <tuong.t.lien@dektech.com.au> Applied, thanks.
diff --git a/net/tipc/link.c b/net/tipc/link.c index 467c53a1fb5c..d4675e922a8f 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c @@ -1065,7 +1065,7 @@ static void tipc_link_update_cwin(struct tipc_link *l, int released, /* Enter fast recovery */ if (unlikely(retransmitted)) { l->ssthresh = max_t(u16, l->window / 2, 300); - l->window = l->ssthresh; + l->window = min_t(u16, l->ssthresh, l->window); return; } /* Enter slow start */