diff options
| author | Dave Airlie <airlied@redhat.com> | 2020-03-31 15:15:47 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2020-03-31 15:15:47 +1000 | 
| commit | 5fc0df93fccd4dc8412bfc488ba4ba8268aa12dc (patch) | |
| tree | 6091ced63dbba747619762470ebba2298676ea0d /net/ipv4/tcp_output.c | |
| parent | 700d6ab987f3b5e28b13b5993e5a9a975c5604e2 (diff) | |
| parent | 7111951b8d4973bda27ff663f2cf18b663d15b48 (diff) | |
Merge v5.6 into drm-next
msm needed rc6, so I just went and merged release
(msm has been in drm-next outside of this tree)
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'net/ipv4/tcp_output.c')
| -rw-r--r-- | net/ipv4/tcp_output.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 306e25d743e8..2f45cde168c4 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1109,6 +1109,10 @@ static int __tcp_transmit_skb(struct sock *sk, struct sk_buff *skb,  		if (unlikely(!skb))  			return -ENOBUFS; +		/* retransmit skbs might have a non zero value in skb->dev +		 * because skb->dev is aliased with skb->rbnode.rb_left +		 */ +		skb->dev = NULL;  	}  	inet = inet_sk(sk); @@ -3037,8 +3041,12 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs)  		tcp_skb_tsorted_save(skb) {  			nskb = __pskb_copy(skb, MAX_TCP_HEADER, GFP_ATOMIC); -			err = nskb ? tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC) : -				     -ENOBUFS; +			if (nskb) { +				nskb->dev = NULL; +				err = tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC); +			} else { +				err = -ENOBUFS; +			}  		} tcp_skb_tsorted_restore(skb);  		if (!err) {  | 
