Subject: Re: [PATCH net v4 1/2] net: sched: tbf: fix calculation of max_size

From: Yang Yingliang <[email-masked]>
Date: Tue, 3 Dec 2013 15:44:07 +0800

On 2013/12/3 12:59, Eric Dumazet wrote:
> On Tue, 2013-12-03 at 11:26 +0800, Yang Yingliang wrote:
> 
>> +	for (max_size = 0; max_size < MAX_PKT_LEN; max_size++)
>> +		if (psched_l2t_ns(&q->rate, max_size) > q->buffer)
>> +			break;
>> +	if (--max_size <= 0)
>> +		goto unlock_done;
>> +
> 
> This seems dubious. With your new code, max_size < 65536
> 
> Prior code had :
> 
> for (n = 0; n < 256; n++)
>     if (rtab->data[n] > qopt->buffer)
>         break;
> max_size = (n << qopt->rate.cell_log) - 1;
> 
> So we could have much bigger max_size.
> 
> The reason I ask is that its possible to have qdisc_pkt_len(skb) being
> bigger than 65536, for TCP packets with low MSS value.
> 

Hmmm, if qdisc_pkt_len(skb) is bigger than 65536, skb_is_gso(skb) is true,
it will go into tbf_segment(). If I am wrong, please point me out, thanks!

BTW, 65536 is suggested by Jesper, I'm a little uncertain about it. He is, too.
Do you or some other developers have stronger opinions on this?

Thanks!
Yang