Loading include/net/tcp.h +2 −0 Original line number Diff line number Diff line Loading @@ -311,6 +311,8 @@ static inline bool tcp_out_of_memory(struct sock *sk) return false; } void sk_forced_mem_schedule(struct sock *sk, int size); static inline bool tcp_too_many_orphans(struct sock *sk, int shift) { struct percpu_counter *ocp = sk->sk_prot->orphan_count; Loading net/ipv4/tcp_output.c +4 −2 Original line number Diff line number Diff line Loading @@ -2816,8 +2816,10 @@ void tcp_xmit_retransmit_queue(struct sock *sk) * connection tear down and (memory) recovery. * Otherwise tcp_send_fin() could be tempted to either delay FIN * or even be forced to close flow without any FIN. * In general, we want to allow one skb per socket to avoid hangs * with edge trigger epoll() */ static void sk_forced_wmem_schedule(struct sock *sk, int size) void sk_forced_mem_schedule(struct sock *sk, int size) { int amt, status; Loading Loading @@ -2864,7 +2866,7 @@ void tcp_send_fin(struct sock *sk) return; } skb_reserve(skb, MAX_TCP_HEADER); sk_forced_wmem_schedule(sk, skb->truesize); sk_forced_mem_schedule(sk, skb->truesize); /* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */ tcp_init_nondata_skb(skb, tp->write_seq, TCPHDR_ACK | TCPHDR_FIN); Loading Loading
include/net/tcp.h +2 −0 Original line number Diff line number Diff line Loading @@ -311,6 +311,8 @@ static inline bool tcp_out_of_memory(struct sock *sk) return false; } void sk_forced_mem_schedule(struct sock *sk, int size); static inline bool tcp_too_many_orphans(struct sock *sk, int shift) { struct percpu_counter *ocp = sk->sk_prot->orphan_count; Loading
net/ipv4/tcp_output.c +4 −2 Original line number Diff line number Diff line Loading @@ -2816,8 +2816,10 @@ void tcp_xmit_retransmit_queue(struct sock *sk) * connection tear down and (memory) recovery. * Otherwise tcp_send_fin() could be tempted to either delay FIN * or even be forced to close flow without any FIN. * In general, we want to allow one skb per socket to avoid hangs * with edge trigger epoll() */ static void sk_forced_wmem_schedule(struct sock *sk, int size) void sk_forced_mem_schedule(struct sock *sk, int size) { int amt, status; Loading Loading @@ -2864,7 +2866,7 @@ void tcp_send_fin(struct sock *sk) return; } skb_reserve(skb, MAX_TCP_HEADER); sk_forced_wmem_schedule(sk, skb->truesize); sk_forced_mem_schedule(sk, skb->truesize); /* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */ tcp_init_nondata_skb(skb, tp->write_seq, TCPHDR_ACK | TCPHDR_FIN); Loading