From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ying Xue Subject: Re: [net 1/1] tipc: initialize broadcast link stale counter correctly Date: Fri, 12 Oct 2018 08:41:24 +0800 Message-ID: References: <1539288149-24122-1-git-send-email-jon.maloy@ericsson.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: tipc-discussion@lists.sourceforge.net To: Jon Maloy , , Return-path: In-Reply-To: <1539288149-24122-1-git-send-email-jon.maloy@ericsson.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: tipc-discussion-bounces@lists.sourceforge.net List-Id: netdev.vger.kernel.org On 10/12/2018 04:02 AM, Jon Maloy wrote: > In the commit referred to below we added link tolerance as an additional > criteria for declaring broadcast transmission "stale" and resetting the > unicast links to the affected node. > > Unfortunately, this 'improvement' introduced two bugs, which each and > one alone cause only limited problems, but combined lead to seemingly > stochastic unicast link resets, depending on the amount of broadcast > traffic transmitted. > > The first issue, a missing initialization of the 'tolerance' field of > the receiver broadcast link, was recently fixed by commit 047491ea334a > ("tipc: set link tolerance correctly in broadcast link"). > > Ths second issue, where we omit to reset the 'stale_cnt' field of > the same link after a 'stale' period is over, leads to this counter > accumulating over time, and in the absence of the 'tolerance' criteria > leads to the above described symptoms. This commit adds the missing > initialization. > > Fixes: a4dc70d46cf1 ("tipc: extend link reset criteria for stale packet > retransmission") > > Signed-off-by: Jon Maloy Acked-by: Ying Xue > --- > net/tipc/link.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/net/tipc/link.c b/net/tipc/link.c > index f6552e4..201c3b5 100644 > --- a/net/tipc/link.c > +++ b/net/tipc/link.c > @@ -1041,6 +1041,7 @@ static int tipc_link_retrans(struct tipc_link *l, struct tipc_link *r, > if (r->last_retransm != buf_seqno(skb)) { > r->last_retransm = buf_seqno(skb); > r->stale_limit = jiffies + msecs_to_jiffies(r->tolerance); > + r->stale_cnt = 0; > } else if (++r->stale_cnt > 99 && time_after(jiffies, r->stale_limit)) { > link_retransmit_failure(l, skb); > if (link_is_bc_sndlink(l)) >