mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-04 08:09:08 +00:00
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
This commit is contained in:
parent
49b39ebf49
commit
ae0b1ccbab
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=301932
@ -577,7 +577,7 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)
|
||||
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, struct toepcb *toep, int drop)
|
||||
}
|
||||
}
|
||||
|
||||
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, struct toepcb *toep, int drop)
|
||||
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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user