On 04.11.2012 21:15, Andreas Tobler wrote:
On 04.11.12 14:57, Andre Oppermann wrote:
On 04.11.2012 13:11, Kim Culhan wrote:
On Sun, November 4, 2012 6:21 am, Dimitry Andric wrote:
On 2012-11-04 02:13, Manfred Antar wrote:
At 03:29 PM 11/3/2012, Adrian Chadd wrote:
After the commit, there was a small discussion thread on svn-src-head@
about the possible problems with the approach.  Maybe you are
experiencing those?

As the commit message says, you should be able to turn the feature off
using:

     sysctl net.inet.tcp.experimental.initcwnd10=0

Can you please try that, and see if the problems go away?

FWIW this did not make the problem go away on 2 machines.

Yes, this very much looks like the same problem as in PR/173309.

Please try the attached patch.  It fixes the connection hang issue.
There may be a second issue I debugging currently base on the feedback
from Fabian Keil.

I jump into this thread since I have a similar network issue.

My scenario:

'make installkernel DESTDIR=/netboot/test' to a nfs mounted drive.
The nfs drive on the server is an ufs fs. No zfs.

Up to r242261 I can install the kernel (or world) in a fluent way to the
nfs destination.

From r242262 it doesn't work smooth. I have stalls, sometimes my
patience is not enough and I kill the process.

I tried 242266 with the above mentioned patch. No real success.

How can I help/test?

Please try the attach patch instead of the above mentioned one.

--
Andre

Index: netinet/tcp_output.c
===================================================================
--- netinet/tcp_output.c        (revision 242577)
+++ netinet/tcp_output.c        (working copy)
@@ -228,7 +228,7 @@
        tso = 0;
        mtu = 0;
        off = tp->snd_nxt - tp->snd_una;
-       sendwin = min(tp->snd_wnd, tp->snd_cwnd);
+       sendwin = ulmax(ulmin(tp->snd_wnd - off, tp->snd_cwnd), 0);

        flags = tcp_outflags[tp->t_state];
        /*
@@ -249,7 +249,7 @@
            (p = tcp_sack_output(tp, &sack_bytes_rxmt))) {
                long cwin;

-               cwin = min(tp->snd_wnd, tp->snd_cwnd) - sack_bytes_rxmt;
+               cwin = ulmin(tp->snd_wnd - off, tp->snd_cwnd) - sack_bytes_rxmt;
                if (cwin < 0)
                        cwin = 0;
                /* Do not retransmit SACK segments beyond snd_recover */
@@ -355,7 +355,7 @@
                         * sending new data, having retransmitted all the
                         * data possible in the scoreboard.
                         */
-                       len = ((long)ulmin(so->so_snd.sb_cc, tp->snd_wnd)
+                       len = ((long)ulmin(so->so_snd.sb_cc, tp->snd_wnd - off)
                               - off);
                        /*
                         * Don't remove this (len > 0) check !
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to