* points to just header, pull a few bytes of payload from
         * frags into skb->data */
                hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2));
 -              if (skb->data_len && (hdr_len == (skb->len - skb->data_len)) &&
 -                      (adapter->hw.mac_type == e1000_82571 ||
 -                      adapter->hw.mac_type == e1000_82572)) {
 -                      unsigned int pull_size;
 -                      pull_size = min((unsigned int)4, skb->data_len);
 -                      if (!__pskb_pull_tail(skb, pull_size)) {
 -                              printk(KERN_ERR "__pskb_pull_tail failed.\n");
 -                              dev_kfree_skb_any(skb);
 -                              return NETDEV_TX_OK;
 +              if (skb->data_len && (hdr_len == (skb->len - skb->data_len))) {
 +                      switch (adapter->hw.mac_type) {
 +                              unsigned int pull_size;
 +                      case e1000_82571:
 +                      case e1000_82572:
 +                      case e1000_82573:
 +                              pull_size = min((unsigned int)4, skb->data_len);
 +                              if (!__pskb_pull_tail(skb, pull_size)) {
 +                                      printk(KERN_ERR 
 +                                              "__pskb_pull_tail failed.\n");
 +                                      dev_kfree_skb_any(skb);
-                                       return -EFAULT;
++                                      return NETDEV_TX_OK;
 +                              }
 +                              len = skb->len - skb->data_len;
 +                              break;
 +                      default:
 +                              /* do nothing */
 +                              break;
                        }
 -                      len = skb->len - skb->data_len;
                }
        }