diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
| -rw-r--r-- | net/ipv4/tcp_output.c | 14 | 
1 files changed, 8 insertions, 6 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 9bfc39ff2285..412a920fe0ec 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -2296,7 +2296,7 @@ void __tcp_push_pending_frames(struct sock *sk, unsigned int cur_mss,  		return;  	if (tcp_write_xmit(sk, cur_mss, nonagle, 0, -			   sk_gfp_atomic(sk, GFP_ATOMIC))) +			   sk_gfp_mask(sk, GFP_ATOMIC)))  		tcp_check_probe_timer(sk);  } @@ -3353,8 +3353,9 @@ void tcp_send_ack(struct sock *sk)  	 * tcp_transmit_skb() will set the ownership to this  	 * sock.  	 */ -	buff = alloc_skb(MAX_TCP_HEADER, sk_gfp_atomic(sk, GFP_ATOMIC)); -	if (!buff) { +	buff = alloc_skb(MAX_TCP_HEADER, +			 sk_gfp_mask(sk, GFP_ATOMIC | __GFP_NOWARN)); +	if (unlikely(!buff)) {  		inet_csk_schedule_ack(sk);  		inet_csk(sk)->icsk_ack.ato = TCP_ATO_MIN;  		inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK, @@ -3376,7 +3377,7 @@ void tcp_send_ack(struct sock *sk)  	/* Send it off, this clears delayed acks for us. */  	skb_mstamp_get(&buff->skb_mstamp); -	tcp_transmit_skb(sk, buff, 0, sk_gfp_atomic(sk, GFP_ATOMIC)); +	tcp_transmit_skb(sk, buff, 0, (__force gfp_t)0);  }  EXPORT_SYMBOL_GPL(tcp_send_ack); @@ -3397,7 +3398,8 @@ static int tcp_xmit_probe_skb(struct sock *sk, int urgent, int mib)  	struct sk_buff *skb;  	/* We don't queue it, tcp_transmit_skb() sets ownership. */ -	skb = alloc_skb(MAX_TCP_HEADER, sk_gfp_atomic(sk, GFP_ATOMIC)); +	skb = alloc_skb(MAX_TCP_HEADER, +			sk_gfp_mask(sk, GFP_ATOMIC | __GFP_NOWARN));  	if (!skb)  		return -1; @@ -3410,7 +3412,7 @@ static int tcp_xmit_probe_skb(struct sock *sk, int urgent, int mib)  	tcp_init_nondata_skb(skb, tp->snd_una - !urgent, TCPHDR_ACK);  	skb_mstamp_get(&skb->skb_mstamp);  	NET_INC_STATS(sock_net(sk), mib); -	return tcp_transmit_skb(sk, skb, 0, GFP_ATOMIC); +	return tcp_transmit_skb(sk, skb, 0, (__force gfp_t)0);  }  void tcp_send_window_probe(struct sock *sk)  | 
