diff options
Diffstat (limited to 'net/ipv4/arp.c')
-rw-r--r-- | net/ipv4/arp.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index 96a164aa1367..5c29ac5b0c3a 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c | |||
@@ -177,7 +177,7 @@ struct neigh_table arp_tbl = { | |||
177 | .gc_staletime = 60 * HZ, | 177 | .gc_staletime = 60 * HZ, |
178 | .reachable_time = 30 * HZ, | 178 | .reachable_time = 30 * HZ, |
179 | .delay_probe_time = 5 * HZ, | 179 | .delay_probe_time = 5 * HZ, |
180 | .queue_len = 3, | 180 | .queue_len_bytes = 64*1024, |
181 | .ucast_probes = 3, | 181 | .ucast_probes = 3, |
182 | .mcast_probes = 3, | 182 | .mcast_probes = 3, |
183 | .anycast_delay = 1 * HZ, | 183 | .anycast_delay = 1 * HZ, |
@@ -592,16 +592,18 @@ struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip, | |||
592 | struct sk_buff *skb; | 592 | struct sk_buff *skb; |
593 | struct arphdr *arp; | 593 | struct arphdr *arp; |
594 | unsigned char *arp_ptr; | 594 | unsigned char *arp_ptr; |
595 | int hlen = LL_RESERVED_SPACE(dev); | ||
596 | int tlen = dev->needed_tailroom; | ||
595 | 597 | ||
596 | /* | 598 | /* |
597 | * Allocate a buffer | 599 | * Allocate a buffer |
598 | */ | 600 | */ |
599 | 601 | ||
600 | skb = alloc_skb(arp_hdr_len(dev) + LL_ALLOCATED_SPACE(dev), GFP_ATOMIC); | 602 | skb = alloc_skb(arp_hdr_len(dev) + hlen + tlen, GFP_ATOMIC); |
601 | if (skb == NULL) | 603 | if (skb == NULL) |
602 | return NULL; | 604 | return NULL; |
603 | 605 | ||
604 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); | 606 | skb_reserve(skb, hlen); |
605 | skb_reset_network_header(skb); | 607 | skb_reset_network_header(skb); |
606 | arp = (struct arphdr *) skb_put(skb, arp_hdr_len(dev)); | 608 | arp = (struct arphdr *) skb_put(skb, arp_hdr_len(dev)); |
607 | skb->dev = dev; | 609 | skb->dev = dev; |