diff options
Diffstat (limited to 'net/core/skbuff.c')
| -rw-r--r-- | net/core/skbuff.c | 14 | 
1 files changed, 7 insertions, 7 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index c642304f178c..fb35b62af272 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -858,6 +858,7 @@ static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb)  	n->cloned = 1;  	n->nohdr = 0;  	n->peeked = 0; +	C(pfmemalloc);  	n->destructor = NULL;  	C(tail);  	C(end); @@ -3719,6 +3720,7 @@ normal:  				net_warn_ratelimited(  					"skb_segment: too many frags: %u %u\n",  					pos, mss); +				err = -EINVAL;  				goto err;  			} @@ -3752,11 +3754,10 @@ skip_fraglist:  perform_csum_check:  		if (!csum) { -			if (skb_has_shared_frag(nskb)) { -				err = __skb_linearize(nskb); -				if (err) -					goto err; -			} +			if (skb_has_shared_frag(nskb) && +			    __skb_linearize(nskb)) +				goto err; +  			if (!nskb->remcsum_offload)  				nskb->ip_summed = CHECKSUM_NONE;  			SKB_GSO_CB(nskb)->csum = @@ -5276,8 +5277,7 @@ struct sk_buff *alloc_skb_with_frags(unsigned long header_len,  			if (npages >= 1 << order) {  				page = alloc_pages((gfp_mask & ~__GFP_DIRECT_RECLAIM) |  						   __GFP_COMP | -						   __GFP_NOWARN | -						   __GFP_NORETRY, +						   __GFP_NOWARN,  						   order);  				if (page)  					goto fill_page;  | 
