Author: jhb
Date: Wed Jun 15 21:08:51 2016
New Revision: 301932
URL: https://svnweb.freebsd.org/changeset/base/301932

Log:
  Use sbused() instead of sbspace() to avoid signed issues.
  
  Inserting a full mbuf with an external cluster into the socket buffer
  resulted in sbspace() returning -MLEN.  However, since sb_hiwat is
  unsigned, the -MLEN value was converted to unsigned in comparisons.  As a
  result, the socket buffer was never autosized.  Note that sb_lowat is signed
  to permit direct comparisons with sbspace(), but sb_hiwat is unsigned.
  Follow suit with what tcp_output() does and compare the value of sbused()
  with sb_hiwat instead.
  
  Approved by:  re (gjb)
  Sponsored by: Chelsio Communications

Modified:
  head/sys/dev/cxgbe/tom/t4_cpl_io.c

Modified: head/sys/dev/cxgbe/tom/t4_cpl_io.c
==============================================================================
--- head/sys/dev/cxgbe/tom/t4_cpl_io.c  Wed Jun 15 21:01:53 2016        
(r301931)
+++ head/sys/dev/cxgbe/tom/t4_cpl_io.c  Wed Jun 15 21:08:51 2016        
(r301932)
@@ -577,7 +577,7 @@ t4_push_frames(struct adapter *sc, struc
        struct tcpcb *tp = intotcpcb(inp);
        struct socket *so = inp->inp_socket;
        struct sockbuf *sb = &so->so_snd;
-       int tx_credits, shove, compl, space, sowwakeup;
+       int tx_credits, shove, compl, sowwakeup;
        struct ofld_tx_sdesc *txsd = &toep->txsd[toep->txsd_pidx];
 
        INP_WLOCK_ASSERT(inp);
@@ -652,9 +652,7 @@ t4_push_frames(struct adapter *sc, struc
                        }
                }
 
-               space = sbspace(sb);
-
-               if (space <= sb->sb_hiwat * 3 / 8 &&
+               if (sbused(sb) > sb->sb_hiwat * 5 / 8 &&
                    toep->plen_nocompl + plen >= sb->sb_hiwat / 4)
                        compl = 1;
                else
@@ -663,7 +661,7 @@ t4_push_frames(struct adapter *sc, struc
                if (sb->sb_flags & SB_AUTOSIZE &&
                    V_tcp_do_autosndbuf &&
                    sb->sb_hiwat < V_tcp_autosndbuf_max &&
-                   space < sb->sb_hiwat / 8) {
+                   sbused(sb) >= sb->sb_hiwat * 7 / 8) {
                        int newsize = min(sb->sb_hiwat + V_tcp_autosndbuf_inc,
                            V_tcp_autosndbuf_max);
 
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to