gianfar: only check headroom when FCB is needed
authorLi Yang <leoli@freescale.com>
Fri, 27 Mar 2009 22:54:30 +0000 (15:54 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 27 Mar 2009 22:54:30 +0000 (15:54 -0700)
Signed-off-by: Li Yang <leoli@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/gianfar.c

index 44cbf2622b46e826375eabba915026403dea5e16..6a38800be3f109fd10d6a472517902c765f64572 100644 (file)
@@ -1310,8 +1310,10 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
        base = priv->tx_bd_base;
 
-       /* make space for additional header */
-       if (skb_headroom(skb) < GMAC_FCB_LEN) {
+       /* make space for additional header when fcb is needed */
+       if (((skb->ip_summed == CHECKSUM_PARTIAL) ||
+                       (priv->vlgrp && vlan_tx_tag_present(skb))) &&
+                       (skb_headroom(skb) < GMAC_FCB_LEN)) {
                struct sk_buff *skb_new;
 
                skb_new = skb_realloc_headroom(skb, GMAC_FCB_LEN);