diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2011-11-17 21:20:04 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-18 14:37:08 -0500 |
commit | 660882432909dbe611f1792eda158188065cb9f1 (patch) | |
tree | 101be8ad6357197cff3dcd6daf573dadab2cdd6b /net/ipv4/ipconfig.c | |
parent | 505a467b66233fd08ac32fca943100130928bf89 (diff) |
ipv4: Remove all uses of LL_ALLOCATED_SPACE
ipv4: Remove all uses of LL_ALLOCATED_SPACE
The macro LL_ALLOCATED_SPACE was ill-conceived. It applies the
alignment to the sum of needed_headroom and needed_tailroom. As
the amount that is then reserved for head room is needed_headroom
with alignment, this means that the tail room left may be too small.
This patch replaces all uses of LL_ALLOCATED_SPACE in net/ipv4
with the macro LL_RESERVED_SPACE and direct reference to
needed_tailroom.
This also fixes the problem with needed_headroom changing between
allocating the skb and reserving the head room.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ipconfig.c')
-rw-r--r-- | net/ipv4/ipconfig.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c index 7f17ba8b0318..915eb5265b2e 100644 --- a/net/ipv4/ipconfig.c +++ b/net/ipv4/ipconfig.c | |||
@@ -763,13 +763,15 @@ static void __init ic_bootp_send_if(struct ic_device *d, unsigned long jiffies_d | |||
763 | struct sk_buff *skb; | 763 | struct sk_buff *skb; |
764 | struct bootp_pkt *b; | 764 | struct bootp_pkt *b; |
765 | struct iphdr *h; | 765 | struct iphdr *h; |
766 | int hlen = LL_RESERVED_SPACE(dev); | ||
767 | int tlen = dev->needed_tailroom; | ||
766 | 768 | ||
767 | /* Allocate packet */ | 769 | /* Allocate packet */ |
768 | skb = alloc_skb(sizeof(struct bootp_pkt) + LL_ALLOCATED_SPACE(dev) + 15, | 770 | skb = alloc_skb(sizeof(struct bootp_pkt) + hlen + tlen + 15, |
769 | GFP_KERNEL); | 771 | GFP_KERNEL); |
770 | if (!skb) | 772 | if (!skb) |
771 | return; | 773 | return; |
772 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); | 774 | skb_reserve(skb, hlen); |
773 | b = (struct bootp_pkt *) skb_put(skb, sizeof(struct bootp_pkt)); | 775 | b = (struct bootp_pkt *) skb_put(skb, sizeof(struct bootp_pkt)); |
774 | memset(b, 0, sizeof(struct bootp_pkt)); | 776 | memset(b, 0, sizeof(struct bootp_pkt)); |
775 | 777 | ||