question about trimning data "len" conditions in TSO in tcp_output.c
Hans Petter Selasky
hps at selasky.org
Fri Nov 6 21:14:23 UTC 2015
On 11/06/15 21:46, Cui, Cheng wrote:
> Hello Hans,
>
> Sorry if my previous email does not reach you because of a bad subject.
>
> This is Cheng Cui. I am reading the CURRENT FreeBSD code in tcp_output.c, and find this question regarding your change in revision 271946.
> https://svnweb.freebsd.org/base/head/sys/netinet/tcp_output.c?r1=271946&r2=271945&pathrev=271946
>
> trim data "len" under TSO:
>
> 885 /*
> 886 * Prevent the last segment from being
> 887 * fractional unless the send sockbuf can be
> 888 * emptied:
> 889 */
> 890 max_len = (tp->t_maxopd - optlen);
> 891 if ((off + len) < sbavail(&so->so_snd)) { <==
> 892 moff = len % max_len;
> 893 if (moff != 0) {
> 894 len -= moff;
> 895 sendalot = 1;
> 896 }
> 897 }
>
> Is there a specific reason that it should skip trimming the data "len" under the condition of "(off + len) == sbavail(&so->so_snd)" in TSO?
> Because I am wondering if we can trim the data "len" directly without
checking the "(off + len)" condition.
Hi Cheng,
I believe the reason is to avoid looping one more time outputting a
single packet containing the remainder of the available data, with
regard to max_len. How did you envision the removal of this check would
influence the generated packet sequence?
--HPS
>
> Thanks,
> --Cheng Cui
> NetApp Scale Out Networking
>
>
More information about the svn-src-head
mailing list