[TCP]: Fix __tcp_push_pending_frames() 'nonagle' handling.
'nonagle' should be passed to the tcp_snd_test() function as 'TCP_NAGLE_PUSH' if we are checking an SKB not at the tail of the write_queue. This is because Nagle does not apply to such frames since we cannot possibly tack more data onto them. However, while doing this __tcp_push_pending_frames() makes all of the packets in the write_queue use this modified 'nonagle' value. Fix the bug and simplify this function by just calling tcp_write_xmit() directly if sk_send_head is non-NULL. As a result, we can now make tcp_data_snd_check() just call tcp_push_pending_frames() instead of the specialized __tcp_data_snd_check(). Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -848,7 +848,6 @@ extern __u32 cookie_v4_init_sequence(struct sock *sk, struct sk_buff *skb,
|
||||
|
||||
/* tcp_output.c */
|
||||
|
||||
extern void __tcp_data_snd_check(struct sock *sk, struct sk_buff *skb);
|
||||
extern void __tcp_push_pending_frames(struct sock *sk, struct tcp_sock *tp,
|
||||
unsigned int cur_mss, int nonagle);
|
||||
extern int tcp_may_send_now(struct sock *sk, struct tcp_sock *tp);
|
||||
|
Reference in New Issue
Block a user