[TCP]: Unconditionally clear TCP_NAGLE_PUSH in skb_entail().
Intention of this bit is to force pushing of the existing send queue when TCP_CORK or TCP_NODELAY state changes via setsockopt(). But it's easy to create a situation where the bit never clears. For example, if the send queue starts empty: 1) set TCP_NODELAY 2) clear TCP_NODELAY 3) set TCP_CORK 4) do small write() The current code will leave TCP_NAGLE_PUSH set after that sequence. Unconditionally clearing the bit when new data is added via skb_entail() solves the problem. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
0fbbeb1ba4
Коммит
89ebd197eb
|
@ -584,7 +584,7 @@ static inline void skb_entail(struct sock *sk, struct tcp_sock *tp,
|
|||
sk_charge_skb(sk, skb);
|
||||
if (!sk->sk_send_head)
|
||||
sk->sk_send_head = skb;
|
||||
else if (tp->nonagle&TCP_NAGLE_PUSH)
|
||||
if (tp->nonagle & TCP_NAGLE_PUSH)
|
||||
tp->nonagle &= ~TCP_NAGLE_PUSH;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче