Prev: [PATCH 1/8] firewire: sbp2: provide fallback if mgt_ORB_timeout is missing
Next: linux-next: pci tree build warning
From: Eric Dumazet on 7 Oct 2009 23:20 Thomas Chou a �crit : > As suggested by Stephen Hemminger. > > Signed-off-by: Thomas Chou <thomas(a)wytron.com.tw> > --- > drivers/net/ethoc.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/drivers/net/ethoc.c b/drivers/net/ethoc.c > index ecc53d9..4a1ed81 100644 > --- a/drivers/net/ethoc.c > +++ b/drivers/net/ethoc.c > @@ -409,7 +409,7 @@ static int ethoc_rx(struct net_device *dev, int limit) > struct sk_buff *skb = netdev_alloc_skb(dev, size); > > size -= 4; /* strip the CRC */ > - skb_reserve(skb, 2); /* align TCP/IP header */ > + skb_reserve(skb, NET_IP_ALIGN); > > if (likely(skb)) { > void *src = phys_to_virt(bd.addr); Sorry to be dense here, but this code breaks if NET_IP_ALIGN > 4. Its also suboptimal, you alloc two bytes in excess. You should do : size -= 4; /* strip the CRC */ skb = netdev_alloc_skb(dev, size + NET_IP_ALIGN); if (skb) { skb_reserve(skb, NET_IP_ALIGN); ... } Please check other implementations... David, maybe we should add following helper : [PATCH] net: Add netdev_alloc_skb_ip_align() helper Instead of hardcoding NET_IP_ALIGN stuff in various network drivers, we can add a helper around netdev_alloc_skb() Signed-off-by: Eric Dumazet <eric.dumazet(a)gmail.com> --- diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index df7b23a..fed788e 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -1489,6 +1489,16 @@ static inline struct sk_buff *netdev_alloc_skb(struct net_device *dev, return __netdev_alloc_skb(dev, length, GFP_ATOMIC); } +static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev, + unsigned int length) +{ + struct sk_buff *skb = netdev_alloc_skb(dev, length + NET_IP_ALIGN); + + if (NET_IP_ALIGN && skb) + skb_reserve(skb, NET_IP_ALIGN); + return skb; +} + extern struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask); /** -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |