diff options
Diffstat (limited to 'net/core/netpoll.c')
| -rw-r--r-- | net/core/netpoll.c | 11 | 
1 files changed, 6 insertions, 5 deletions
| diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 3d84fb9d8873..f9f40b932e4b 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -362,22 +362,23 @@ EXPORT_SYMBOL(netpoll_send_skb_on_dev);  void netpoll_send_udp(struct netpoll *np, const char *msg, int len)  { -	int total_len, eth_len, ip_len, udp_len; +	int total_len, ip_len, udp_len;  	struct sk_buff *skb;  	struct udphdr *udph;  	struct iphdr *iph;  	struct ethhdr *eth;  	udp_len = len + sizeof(*udph); -	ip_len = eth_len = udp_len + sizeof(*iph); -	total_len = eth_len + ETH_HLEN + NET_IP_ALIGN; +	ip_len = udp_len + sizeof(*iph); +	total_len = ip_len + LL_RESERVED_SPACE(np->dev); -	skb = find_skb(np, total_len, total_len - len); +	skb = find_skb(np, total_len + np->dev->needed_tailroom, +		       total_len - len);  	if (!skb)  		return;  	skb_copy_to_linear_data(skb, msg, len); -	skb->len += len; +	skb_put(skb, len);  	skb_push(skb, sizeof(*udph));  	skb_reset_transport_header(skb); | 
