On Sat, 2016-12-03 at 23:07 -0800, Eric Dumazet wrote:
> From: Eric Dumazet <eduma...@google.com>
> 
> 1) Old code was hard to maintain, due to complex lock chains.
>    (We probably will be able to remove some kfree_rcu() in callers)
> 
> 2) Using a single timer to update all estimators does not scale.
> 
> 3) Code was buggy on 32bit kernel (WRITE_ONCE() on 64bit quantity
>    is not supposed to work well)


> diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
> index 
> c7adcb57654ea57d1ba6702c91743cb7d2c74d28..859b60bfa86712031186fffc09c65bc43aa065dd
>  100644
> --- a/net/ipv4/tcp_output.c
> +++ b/net/ipv4/tcp_output.c
> @@ -2081,6 +2081,14 @@ static bool tcp_small_queue_check(struct sock *sk, 
> const struct sk_buff *skb,
>       limit <<= factor;
>  
>       if (atomic_read(&sk->sk_wmem_alloc) > limit) {
> +             /* Special case where TX completion is delayed too much :
> +              * If the skb we try to send is the first skb in write queue,
> +              * then send it !
> +              * No need to wait for TX completion to call us back.
> +              */
> +             if (skb == sk->sk_write_queue.next)
> +                     return false;
> +

Oups, this has nothing to do here. I will send a v2, sorry.


Reply via email to